我完全按照wiki的规定为sidekiq安装了新贵服务。
就是说,我有一个新贵的脚本,它使用以下命令创建一个进程:
# skipped other insstructions
script
exec /bin/bash <<'EOT'
source /home/me/.my_env
cd /home/me
exec bin/sidekiq -e production
EOT
end script
服务可以完美启动,但是正如人们可能会看到的那样,sidekiq的PID不等于已知的PID upstart
。
» initctl status sidekiq
# sidekiq start/running, process 16020
» ps axww|grep sidekiq
# 16181 ? Sl 0:41 sidekiq 3.0.0 me[0 of 3 busy]
该配置适用于除sidekiq之外的任何其他新贵脚本:
» sudo initctl stop sidekiq
# sidekiq stop/waiting
» ps axww|grep sidekiq
# 16181 ? Sl 0:45 sidekiq 3.0.0 me[0 of 3 busy]
似乎initctl
杀死了bash进程,将其视为工作(16020),但是底层sidekiq
继续存在:
» ps axww|grep '16181\|16020'
# 16181 ? Sl 0:45 sidekiq 3.0.0 me[0 of 3 busy]
我究竟做错了什么?
script
部分中使用了复杂的脚本,该脚本在执行期间创建了许多进程。新贵似乎放弃了这一点,因此我终于添加了一个post-stop
部分,以优雅地关闭sidekiq。