乘客为延迟工作杀害背景工人

时间:2016-02-06 19:27:55

标签: nginx passenger delayed-job ruby-on-rails-4.2

我在Linux虚拟机上运行Rails 4.2。我使用Nginx作为我的Web服务器,使用Passenger作为我的Web应用程序服务器。

我的应用运行没有任何问题。最近,我开始使用延迟作业发送电子邮件。这工作正常,但问题是我的后台工作程序进程因任何原因被杀死,因此电子邮件不会在应该发送时发送出去。在我SSH到我的服务器后,我运行以下命令来启动后台工作程序:

rake jobs:work &

这会触发后台进程并从终端实例中分离rake命令,因此我希望该进程继续运行。该过程似乎被Passenger杀死,因为我的后台任务将在几分钟后执行。

如何阻止Passenger杀死我的后台任务?

1 个答案:

答案 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分钟然后回来了,这个过程仍在运行并发送电子邮件!