帮heyxiu大佬写了个ping0的systemd脚本,但是

查看 112|回复 6
作者:imes   
   
@heyxiu 大佬的分布式 ping 检测计划是我的梦想之一,毕竟能让吃灰小鸡派上用场。但是nohup这玩意不是太稳定也经不起折腾。比如一重启就没了,不如systemd来的痛快和方便。
帮heyxiu大佬写了个ping0的systemd脚本,但是系统适配让我搞不清了。
1. 我没有redhat系其他类型的小鸡,所以判断系统的时候抓瞎
2. 我对使用arch命令来检查CPU架构不是太自信
3. systemd的ExecStart=/usr/local/ping0/ping0 username中,ping0 username是无法执行的。一般都是ExecStart=/usr/local/ping0/ping0 -c /usr/local/ping0/ping0.conf这种格式。程序是heyxiu写的,我无能为力。
源码先放下面吧(
目前还是无法.正常使用的,不要尝试
),如果heyxiu能修改一下程序,我应该可以花点时间适配一下,让分布式 ping 检测从nohup变成systemd
安装脚本
[ol]#!/usr/bin/env bash
clear
echo "    ################################################"
echo "    #                                              #"
echo "    #              ping0.cc分布式检测计划           #"
echo "    #                 https://ping0.cc             #"
echo "    #                  Version 0.1                 #"
echo "    ################################################"
# powered by https://pa.ci
# 检查是否为root用户
if [ $(id -u) != "0" ]; then
    echo "错误: 必须使用root权限执行此脚本!"
    exit 1
fi
# 检查是否安装过,若有则删除
if [ -f /usr/local/ping0/ping0 ]; then
    echo "检测到已安装过ping0,正在删除..."
    systemctl stop ping0.service
    systemctl disable ping0.service
    rm -rf /usr/local/ping0
    rm -rf /etc/systemd/system/ping0.service
    echo "删除完成!"
fi
# 检查系统是否为RedHat系列或者Debian系列,如果不是则退出
if [ -f /etc/redhat-release ]; then
    OS=CentOS
    PM=yum
elif [ ! -z "`cat /etc/issue | grep bian`" ]; then
    OS=Debian
    PM=apt-get
elif [ ! -z "`cat /etc/issue | grep Ubuntu`" ]; then
    OS=Ubuntu
    PM=apt-get
else
    echo "不支持的操作系统!"
    exit 1
fi
# 安装依赖 "wget"
if [ "$PM" = "yum" ]; then
    yum install -y wget
else
    apt-get install -y wget
fi
# 使用 "arch" 命令检查系统架构,x86_64、arm32或arm64
if [ `arch` = "x86_64" ]; then
    ARCH=x86_64
elif [ `arch` = "armv7l" ]; then
    ARCH=arm32
elif [ `arch` = "aarch64" ]; then
    ARCH=arm64
else
    echo "不支持的系统架构!"
    exit 1
fi
# 新建目录 /usr/local/ping0,并使用wget下载安装文件
mkdir -p /usr/local/ping0
# x86_64: https://ping0.cc/data/ping0
# arm32: https://ping0.cc/data/ping0-arm
# arm64: https://ping0.cc/data/ping0-arm64
if [ "$ARCH" = "x86_64" ]; then
    wget --no-check-certificate -qO- https://ping0.cc/data/ping0 > /usr/local/ping0/ping0
elif [ "$ARCH" = "arm32" ]; then
    wget --no-check-certificate -qO- https://ping0.cc/data/ping0-arm > /usr/local/ping0/ping0
elif [ "$ARCH" = "arm64" ]; then
    wget --no-check-certificate -qO- https://ping0.cc/data/ping0-arm64 > /usr/local/ping0/ping0
fi
echo "主文件安装完成!"
# 给安装文件添加执行权限
chmod +x /usr/local/ping0/ping0
# 下载systemd管理文件到/etc/systemd/system/ping0.service
wget --no-check-certificate -qO- /etc/systemd/system/ping0.service https://ping0.cc/data/ping0.service
# 要求用户输入用户名
read -p "请输入用户名: " USERNAME
# 如果用户名为空,则使用ping0作为用户名
# 将ping0.service中的用户名替换为用户输入的用户名
if [ "$USERNAME" != "" ]; then
    sed -i "s/username/$USERNAME/g" /etc/systemd/system/ping0.service
fi
# 启用systemd管理,并启用ping0服务
systemctl daemon-reload
systemctl enable ping0.service
systemctl start ping0.service
[/ol]复制代码
systemd管理脚本
[ol][Unit]
Description=Ping0 Monitor Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/ping0/ping0 -c /usr/local/ping0/ping0.conf
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target[/ol]复制代码

大佬, 脚本, 用户名

mjj666zzz   
   
要最小权限选择,不要动不动就root,这种用nobody就行了
经常用到的二进制程序可以放在/usr/local/bin/,但这种放/opt/下就行
[ol][Unit]
Description=ping0 Service
Documentation=https://ping0.cc/ping
After=network.target
[Service]
User=nobody
Group=nogroup
ExecStart=/opt/ping0
Restart=on-failure
[Install]
WantedBy=multi-user.target[/ol]复制代码
acaiplus   
anegt能开源吗 @heyxiu
大炮   
好计划,好项目。。。不错,帮顶.
gyhl   
比探针实用多了,吃灰小鸡发光发热
imes
OP
  

mjj666zzz 发表于 2023-3-20 17:09
要最小权限选择,不要动不动就root,这种用nobody就行了
经常用到的二进制程序可以放在/usr/local/bin/,但 ...

感谢大佬 我稍后修改一下
W4ter   
那我写一下docker吧 等我
您需要登录后才可以回帖 登录 | 立即注册

返回顶部