如果您的計算機上有可用的start-stop-daemon,我強烈建議使用它來啓動您的進程。 start-stop-daemon會以非特權用戶的身份啓動進程,而不會從sudo或su(recommended in the upstart cookbook)分叉,並且它還內置了對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-10 18:21:05
Egg
爲什麼要在你已經指定'respawn'的時候使用monit? – auny 2013-07-29 17:42:30
@auny除了新手/重生之外,使用monit的原因是respawn只知道進程是否存活,但不知道應用程序是否處於壞狀態。另一方面,Monit可以以不同的方式與應用程序交互,例如點擊http狀態端點,以處理進程可能正在運行的場景,但應用程序處於壞或狀態不良,這將指示進程需要重新啓動。 – Egg 2013-11-12 23:14:37
Redis現在擁有自己的pid功能(redis.conf中的pidfile) - http://download.redis.io/redis-stable/redis.conf – Willem 2016-03-23 10:33:40