runit 是一个 Unix 服务监控程序,能管理指定程序的启动停止等状态。

脚本示例

#!/bin/sh

GUNICORN=/usr/local/bin/gunicorn
ROOT=/path/to/project
PID=/var/run/gunicorn.pid

APP=main:application

if [ -f $PID ]; then rm $PID; fi

cd $ROOT
exec $GUNICORN -c $ROOT/gunicorn.conf.py --pid=$PID $APP

将上述脚本保存为 /etc/sv/[app_name]/run 并赋予执行权限 chmod u+x /etc/sv/[app_name]/run。(将 [app_name] 替换为实际所需的服务名)

然后创建软连接 ln -s /etc/sv/[app_name] /etc/service/[app_name],这时,指定的程序应已自动运行了。

指定运行程序的用户

默认的 runit 模板由 root 用户身份执行,如果想让脚本以其他用户身份执行可使用 chpst 命令,例如:

#!/bin/sh

FRPC=/usr/bin/frpc
CONFIG=/etc/frp/frpc.ini
LOG=/var/log/frp.log
USER=pi

exec chpst -u $USER $FRPC -c $CONFIG -L $LOG

即在命令前添加 chpst -u USER

管理

可使用 sv 命令管理服务

服务状态

$ sudo sv status gunicorn

服务启动

$ sudo sv start gunicorn

服务停止

$ sudo sv stop gunicorn

相关链接