在 GNU screen 中优雅地运行 Caddy

容我先吐槽两句, 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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注