从 upstart 运行守护进程

从 upstart 运行守护进程

我在 Ubuntu 12.04 LTS 下的 VPS 上运行我的应用程序。

我的一个应用程序的一个守护进程有问题。这个进程叫做“delayed_job”(如果你不熟悉的话 - 这只是一个后台任务处理程序)。

这个过程的问题是有时它会被终止(我猜是因为我的服务器上的 RAM 有限 - 只有 1GB)。

但这件事的主要问题是没有能力在崩溃或“kill”信号后重新启动,这与“unicorn”(它是一个Rails应用服务器)进程不同,无论发生什么情况,它们总是重新启动。

是的,这确实是一件大事,因为很多应用程序功能都在使用后台任务。

当 VPS 进行维护工作(由 VPS 所有者发起)时也会发生同样的情况,重启后“delayed_job”进程不再存在于系统中。

这是我每次启动时运行的命令:RAILS_ENV=production script/delayed_job start

这是一个众所周知的问题,但是我在网上找到的唯一解决办法就是这篇文章:http://www.alexreisner.com/code/upstart建议使用 Linux 的“upstart”功能和“respawn”选项,如果进程被终止或崩溃,该选项可以重新启动该进程。

尽管这篇文章有点过时,但我发现 Ubuntu 12.04 应该支持这个功能,并且我在/etc/init目录中创建了一个符号链接(我称之为:delayed_job.conf)到我放在我的一个应用程序文件夹(确切地说是 app_name/config)中的“delayed_job”文件 - 我已经按照这篇文章所说的做了一切。

我的问题是:当我尝试start delayed_job在控制台中启动这个新进程()时,我得到:

delayed_job start/running, process 6000

但事实上 - 根本没有创建“delayed_job”进程。

status delayed_job而initctl进程的状态( )依然为:delayed_job stop/waiting

执行后kill -9 6000我得到-bash: kill: (6000) - No such process

所以,这意味着什么都没执行。我尝试在不同条件下运行这个程序很多次 - 什么都没做,毫无效果。根本不起作用。

我可以尝试什么来让它发挥作用,或者它根本没用?

答案1

听起来你的 EXPECT 节不正确或不存在。Upstart 正在跟踪错误的 pid。请参阅 cookbook 以获取有关如何使用的说明预计。请注意关于理解该部分的重要性的警告。

请注意,如果您的应用程序 forky 过多(即 forky 超过两次),Upstart 无法跟踪其 pid,您可以自行跟踪。应用程序可能具有写入 pid 文件的机制,或者您可以使用 捕获它。start-stop-daemon请参阅回答一个例子,特别是 pg_agent.conf 文件。

编辑:

请注意,如果 Upstart 无法跟踪您的应用程序的 pid,您将无法使用该RESPAWN节。在这种情况下,Upstart 可能不适合您的需求。也许像 这样的竞争产品forever可以。不知道。

相关内容