容我先吐槽两句, Caddy 的守护运行真的是把我折腾惨了,高端的 init 工具如 systemd 之流没一个是靠谱的,浪费时间浪费生命,最后还是用 screen 解决了问题.你们说 screen 很 low, 我 tm 才不管, it just works.
但毕竟 screen 是很简陋的.那么本文就来说说怎么让 screen 也拥有退出自动重启和开机自启的功能.本文参考了写了个简单的 shadowsocks 退出自动重启脚本一文.
首先,我写了两个 Shell 脚本.一个叫 caddy_init.sh
,内容如下:
/usr/local/bin/caddy -log /var/log/caddy.log -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
(注意, Caddy 0.9.5 版本的 QUIC 似乎存在问题,所以我暂时去掉了 -quic
参数)
另一个叫 caddy_check.sh
,内容如下:
pids="$($_CMD pgrep caddy)" if [ ! $pids ]; then screen -dmS caddy /path/to/caddy_init.sh fi
(第 1 行的那个$_CMD
我不太懂是是什么意思,问了原作者,还没回复我)
这里我解释一下这个 screen -dmS
命令,用它创建的会话会在内部执行的命令完成后立即停止, 比如 screen -dmS foo ls
执行后是不会存在一个叫 foo
的会话的.这样做的好处是,上述脚本文件不管运行多少次都不会出现两个同名的会话(还不用说加了 if 判断).
然后编辑 crontab 规则,把这个加进去:
*/1 * * * * /path/to/caddy_check.sh
这样就实现了自动重启,而且附带着也实现了开机自启.
当然,你也可以在 crontab 规则里指定用户名(比如 www-data), 以提升安全性.
就是这样,很简单吧.
以上.
2 thoughts on “在 GNU screen 中优雅地运行 Caddy”