34

下面是一个 redis 的 upstart 脚本。如何创建一个 pid 以便我使用 monit 进行监控?

#!upstart
description "Redis Server"

env USER=redis

start on startup
stop on shutdown

respawn

exec sudo -u $USER sh -c "/usr/local/bin/redis-server /etc/redis/redis.conf 2>&1 >> /var/log/redis/redis.log"
4

2 回答 2

68

如果您的机器上可以使用 start-stop-daemon,我强烈建议您使用它来启动您的进程。start-stop-daemon 将处理以非特权用户身份启动进程,而无需从 sudo 或 su 分叉(在新贵食谱中推荐),并且它还内置了对 pid 文件管理的支持。例如:

/etc/init/app_name.conf

#!upstart
description "Redis Server"

env USER=redis

start on startup
stop on shutdown

respawn

exec start-stop-daemon --start --make-pidfile --pidfile /var/run/app_name.pid --chuid $USER --exec /usr/local/bin/redis-server /etc/redis/redis.conf >> /var/log/redis/redis.log 2>&1

post-start script或者,您可以通过使用节来创建它并使用post-stop script节来删除它来手动管理 pid 文件。例如:

/etc/init/app_name.conf

#!upstart
description "Redis Server"

env USER=redis

start on startup
stop on shutdown

respawn

exec sudo -u $USER sh -c "/usr/local/bin/redis-server /etc/redis/redis.conf 2>&1 >> /var/log/redis/redis.log"

post-start script
    PID=`status app_name | egrep -oi '([0-9]+)$' | head -n1`
    echo $PID > /var/run/app_name.pid
end script

post-stop script
    rm -f /var/run/app_name.pid
end script
于 2012-05-10T18:21:05.583 回答
22

Egg 的第一个带有 start-stop-daemon 的例子是可行的。

如果您选择第二个,我会建议 $$ 获取 PID。

#!upstart
description "Redis Server"

env USER=redis

start on startup
stop on shutdown

respawn

script
    echo $$ > /var/run/app_name.pid
    exec sudo -u $USER sh -c "/usr/local/bin/redis-server /etc/redis/redis.conf 2>&1 >> /var/log/redis/redis.log"
end script

post-stop script
    rm -f /var/run/app_name.pid
end script
于 2013-03-16T21:55:27.493 回答