我在Linux虚拟机上运行Rails 4.2。我使用Nginx作为我的Web服务器,使用Passenger作为我的Web应用程序服务器。
我的应用运行没有任何问题。最近,我开始使用延迟作业发送电子邮件。这工作正常,但问题是我的后台工作程序进程因任何原因被杀死,因此电子邮件不会在应该发送时发送出去。在我SSH到我的服务器后,我运行以下命令来启动后台工作程序:
rake jobs:work &
这会触发后台进程并从终端实例中分离rake
命令,因此我希望该进程继续运行。该过程似乎被Passenger杀死,因为我的后台任务将在几分钟后执行。
如何阻止Passenger杀死我的后台任务?
答案 0 :(得分:0)
我明白了!我决定改为运行delayed_job
进程。在运行rake jobs:work &
时,它启动了一个Ruby进程,Passenger将其终止。然而,乘客似乎并没有扼杀其他进程。
在Delayed Job documentation之后,我将以下内容添加到Gemfile
:
gem 'daemons'
然后我在虚拟机中运行以下命令:
RAILS_ENV=production bin/delayed_job start
我首先收到了权限错误,因此脚本没有运行。为了解决这个问题,我将delayed_job
脚本设置为具有完整的读/写/执行权限:
chmod +x bin/delayed_job
我离开大约10分钟然后回来了,这个过程仍在运行并发送电子邮件!