使用定时任务cron监视Shadowsocks进程

技术 30662 次围观 29 次吐槽

有时候我们需要监视一下某个进程的持续运行,当遇到某种不可控因素导致进程被杀掉的情况下,就需要自动重新启动,以保证服务的可持续性。
比如,监控 Shadowsocks 服务端的运行状态。
于是写了个监视脚本 shadowsocks-crond.sh,自动监视,一旦发现进程不存在便会重新启动。每次监视事件都会写入日志。

下面介绍安装和使用步骤。

一、下载安装

首先需要将脚本下载到某个固定路径下,比如 /opt 下,再赋予执行权限。
执行以下命令:

wget --no-check-certificate -O /opt/shadowsocks-crond.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-crond.sh
chmod 755 /opt/shadowsocks-crond.sh

二、检查 cron 进程

执行以下命令,检查 cron 进程是否存在:

ps -ef | grep -v grep | grep cron


如果存在返回值,则表示 cron 已经正确安装并处于启动中。
否则,则需要安装 cron。

CentOS/Redhat/Amazon 执行如下命令:

yum install -y crontabs


Debian/Ubuntu 执行如下命令:

apt-get install -y cron

三、配置 cron 计划

假设监视脚本路径就是 /opt/shadowsocks-crond.sh
假设设为每 5 分钟监视一次。
那么配置 cron 计划如下:

(crontab -l ; echo "*/5 * * * * /opt/shadowsocks-crond.sh") | crontab -

以上表示,在保留原有的 cron 设置的前提下,追加设置
*/5 * * * * /opt/shadowsocks-crond.sh
即每过 5 分钟,执行一次脚本 /opt/shadowsocks-crond.sh

这样系统便会每 5 分钟检查一下 Shadowsocks 进程是否存在,如果不存在了会自动重新启动。
脚本每次运行会写日志的,日志完整路径如下:
/var/log/shadowsocks-crond.log

示例日志:

2017-12-31 13:45:01 Shadowsocks-libev is running with pid 32566
2017-12-31 13:50:01 Shadowsocks-libev is not running
2017-12-31 13:50:01 Starting Shadowsocks-libev
2017-12-31 13:50:01 Shadowsocks-libev start success
2017-12-31 13:55:01 Shadowsocks-libev is running with pid 5089

转载请注明:秋水逸冰 » 使用定时任务cron监视Shadowsocks进程

发表评论
取消评论
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
表情

已有评论 (29)

  1. 能不能写一个每天删除日志的自动脚本?否则经常忘记了这个日志的存在,会越来越大的。
    loren6个月前 (2018-04-19)回复
  2. 用上了,谢谢。第一次配置计划有个提示,no crontab for root,经谷歌找到解决办法。 同样在 root 用户下输入 crontab -e 按 Esc 按:wq 回车(nano编辑器 按Ctrl+X退出) 主要原因是由于这个liunx服务器 第一次使用 crontab ,还没有生成对应的文件导致的,执行了 编辑(crontab -e)后 就生成了这个文件。然后再执行 (crontab -l ; echo "*/5 * * * * /opt/shadowsocks-crond.sh") | crontab - 就行了
    xijing7个月前 (2018-03-23)回复
  3. cat /var/log/shadowsocks-crond.log
    17个月前 (2018-03-19)回复
  4. 我发现ss服务极少被杀(没试过),反而是linux不知道什么时候死机了,需要重启才能解决……
    ger7个月前 (2018-03-14)回复
  5. 每年为了翻墙,,我们要多花 多少成本,,,,蒋公剿匪不力
    good9个月前 (2018-02-06)回复
  6. 请问对自己搭的 SSR 也有效吗?
    jrk9个月前 (2018-02-02)回复
    • 同问,大部分人用的都是SSR吧
      loren6个月前 (2018-04-18)回复
  7. 可以增加定时重启 SS 的功能么?
    nuomi9个月前 (2018-02-01)回复
  8. 一直用的supervisor
    vc59个月前 (2018-01-16)回复
    • 然我用起来没卵用,kill死了还是不能启动...
      咔咔9个月前 (2018-01-17)回复
  9. 秋水大大您好,感谢您的付出。我在使用这个定时脚本时候用kill命令杀死ss(您的四合一安装的)进程后,测试脚本作用,发现不能真正启动,用ps查看也无进程,查看该脚本日志,显示大意为发现ss未运行,启动ss,启动成功,然后过了2分钟又是这样子的日子。说明脚本能发现问题,但是并不能真正启动ss。。求教于大大您!我的是debian 8 x64 内核4.14.12-x86_64-linode92,脚本安装完全按照您的步骤。谢谢您! ##抄录日子如下: 2018-01-11 10:24:01 Shadowsocks-libev start success 2018-01-11 10:26:01 Shadowsocks-libev is not running 2018-01-11 10:26:01 Starting Shadowsocks-libev 2018-01-11 10:26:01 Shadowsocks-libev start success 2018-01-11 10:28:01 Shadowsocks-libev is not running 2018-01-11 10:28:01 Starting Shadowsocks-libev 2018-01-11 10:28:01 Shadowsocks-libev start success .......................
    咔咔9个月前 (2018-01-11)回复
    • 这种情况应该是哪里出了什么问题。建议打开 /var/log/messages 去看看 ss-server 有什么报错信息先。
      秋水逸冰9个月前 (2018-01-11)回复
      • 呃 完全看不懂,也没看到有什么错误单词,我换成debian 9 还是不行,今天早上换成centos 6.8 kill进程能成功启动. 我马上在测试下Ubuntu 16..
        咔咔9个月前 (2018-01-12)回复
      • 哈哈哈 发现秘密了 如果安装您的四合一脚本安装shadowsocks-libev时候不选择安装" simple-obfs",就可以成功启动.如果选择就不行,并不能真正启动....不知道这个问题是否和该脚本有关...不懂...
        咔咔9个月前 (2018-01-12)回复
      • 再Debian 8 不用大大您的四合一脚本 而是用ss官方的方法安装ss-libev和obs混淆后,这个定时脚本又起作用了.但是显示的pid是很长一串,哈哈,附录cron定时脚本部分日志,请大大参阅: 2018-01-17 09:48:01 Shadowsocks-libev is running with pid 2018011709470952821305213052130617094709117094709117094709213052018011709470917094709213052018011709470917094709213052018011709470900008826 2018-01-17 09:49:02 Shadowsocks-libev is not running 2018-01-17 09:49:02 Starting Shadowsocks-libev 2018-01-17 09:49:02 Shadowsocks-libev start success 2018-01-17 09:50:01 Shadowsocks-libev is running with pid 2018011709490259821362213622136417094902117094902117094902213622018011709490217094902213622018011709490217094902213622018011709490200008826 2018-01-17 09:51:01 Shadowsocks-libev is running with pid 20180117094902159821362213622136417094902117094902117094902213622018011709490217094902213622018011709490217094902213622018011709490200008826 2018-01-17 09:55:01 Shadowsocks-libev is running with pid 201801170949025821362213622136417094902117094902117094902213622018011709490217094902213622018011709490217094902213622018011709490200008826 2018-01-17 10:00:01 Shadowsocks-libev is running with pid 2018011709490210821362213622136417094902117094902117094902213622018011709490217094902213622018011709490217094902213622018011709490200008826 2018-01-17 18:05:01 Shadowsocks-libev is running with pid 2018011717490215821362213622136417174902117174902117174902213622018011709490217174902213622018011709490217174902213622018011709490200008826171801172136220180117180117171803292136220180117180329171803322136220180117180332 2018-01-17 18:10:01 Shadowsocks-libev is running with pid 2018011717490220821362213622136417174902213622018011709490200008826171801172136220180117180117171803292136220180117180329171803322136220180117180332171806422136220180117180642171807092136220180117180709171808252136220180117180825171808422136220180117180842171808502136220180117180850171809202136220180117180920
        咔咔9个月前 (2018-01-17)回复
        • 再次发现密码了,使用您的四合一脚本安装ss-libev时候选择安装的obf的路径不和ss-libev一样的,导致定时启动不成功...我使用您的四合一脚本不选择安装obf,而是使用您的单独obf一键脚本,安装后路径就是一样的,测速没问题. 附录进程: #1/ss四合一起安装的ss-libev+obf root 285 1 0 Jan07 ? 00:00:02 /usr/local/bin/ss-server -u -c /etc/shadowsocks-libev/config.json -f /var/run/s root 288 285 0 Jan07 ? 00:00:02 obfs-server --obfs tls #2/分别安装的进程路径: root 5508 1 0 07:22 ? 00:00:00 /usr/local/bin/ss-server -uv -c /etc/shadowsocks-libev/config.json -f /var/run/ root 5510 5508 0 07:22 ? 00:00:00 /usr/local/bin/obfs-server --obfs tls
          咔咔9个月前 (2018-01-17)回复
        • 该定时任务的脚本,是针对我编写的一键脚本安装后的 SS 服务端的。
          秋水逸冰9个月前 (2018-01-17)回复
          • 大佬,你这脚本我看了下,好像只能监控单线程的SSR, "workers":5 多线程的SSR 脚本就凉凉。。。
            Shinglee9个月前 (2018-01-30)回复
          • 大佬,我还想问问,SSR linux版本的客户端,有没有可以用的 最好是python的,我找了好久,发现都不可用。。。
            Shinglee9个月前 (2018-01-30)回复
  10. 秋大你好, 谢谢你写的脚本, 非常强大。 另外本人有个小小的请求, 大大能否对shadowsocks的四个版本,做下对比, 哪个版本的优缺点分别是什么。 我一直在用SSR, 不知道其他三个版本,怎么样,因为其他三个版本好像没有特定的客户端,但是SSR有,目前据我所知是这样。。。。。。
    小白10个月前 (2018-01-08)回复
  11. 你的脚本写的真好 学习了如何把crontable执行情况放到日志的方法 嘿嘿 感谢! 可以加您的QQ好友不?
    20has10个月前 (2018-01-05)回复
  12. 可以用pm2,自带重启,日志等功能
    tdus10个月前 (2018-01-04)回复
  13. 用supervisor不就可以了吗
    zhenhappy10个月前 (2018-01-02)回复
  14. 其实直接定时重启就好了。
    啊狗10个月前 (2018-01-02)回复
  15. (crontab -l ; echo "*/5 * * * * /opt/shadowsocks-crond.sh") | crontab - 你的这句话好像有点问题
    不烦此生10个月前 (2017-12-31)回复
    • 既然是写出来的,肯定是测试过的:)
      秋水逸冰10个月前 (2017-12-31)回复
      • - shell的反向引用么 类似 XXX | sh - 直接echo '*/5 * * * * /opt/shadowsocks-crond.sh ' >>/var/spool/cron/root 也行 当然前提是root用户咯
        20has10个月前 (2018-01-05)回复