![使用脚本启动 Resque 工作程序不起作用,手动启动可以](https://linux22.com/image/31307/%E4%BD%BF%E7%94%A8%E8%84%9A%E6%9C%AC%E5%90%AF%E5%8A%A8%20Resque%20%E5%B7%A5%E4%BD%9C%E7%A8%8B%E5%BA%8F%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%8C%E6%89%8B%E5%8A%A8%E5%90%AF%E5%8A%A8%E5%8F%AF%E4%BB%A5.png)
我试图弄清楚为什么我的过程如果通过脚本启动则无法工作,但如果手动启动则可以正常工作。
详细信息如下:
script 是一个 resque 工作启动脚本。脚本位置是/etc/monit/conf.d/start_resque.sh。权限为755,归ubuntu所有:ubuntu
当我运行脚本时,日志输出会获取一个 pid,并显示“正在启动工作程序 ip-xx-xxx-xxx-xx:26732(或任何 pid )”,但是当我 ps aux | grep 26732,没有显示任何正在运行的内容。当我在 Rails 项目目录中手动运行相同的命令时,会显示相同的“启动工作程序”输出,并且该进程实际上已启动并继续运行。需要注意的一件事是,如果手动启动,则会显示附加输出:“nohup:忽略输入”
有人可能可以帮助解决的另一个问题是,为什么 Behind=yes 实际上并没有守护我的工作人员......因此我求助于 nohup,这似乎工作正常。
这是我的脚本(我手动运行的命令在 cd 之后):
#!/bin/bash
echo "starting worker.."
workercount="$(ps aux | grep -c resque)"
currentdir="/var/www/apps/myapp/current"
logdir=$currentdir/log/resque_worker.log
pidfile=$currentdir/tmp/pids/resque_worker_$workercount.pid
cd $currentdir
nohup bundle exec rake environment resque:work RAILS_ENV=production QUEUE='*' VERBOSE=1 PIDFILE=$pidfile >> $logdir 2>&1 &
echo "started worker $workercount! view log at $logdir. view pidfile at $pidfile"
ssh
附加说明:在 Ubuntu 12.04 上,并在运行脚本和手动命令时通过连接。
答案1
好吧,我切换到了 Sidekiq,它“正常工作”。在resque和部署上浪费了很多时间,但我获得了一些经验,并且几乎提高了我的系统管理技能。 Sidekiq 似乎是一个更好的选择 - 它利用了线程的优势,并且有一个很棒的 wiki、更新的 Web 界面、一个专业选项,并且在其主页上有一个非常酷的忍者图标。