如何创建 CronJob 以在重新启动时运行命令?

如何创建 CronJob 以在重新启动时运行命令?

通过我的主机,我可以访问 SSH 并使用控制面板。我通过 SSH 在轻量级服务器上安装了 Rails。我想在服务器出现故障时重新启动服务器。我想我需要手动启动它,因为我想启动两个在不同版本的 Ruby 上运行的服务器。

我想知道是否可以使用控制面板上的“Cronjob”区域来执行此操作,如果可以,我需要什么命令。

通过 SSH,我将按如下方式启动服务器:

cd [app1path] 
bundle exec thin -C /etc/thin/app2.yml start

cd [app2path]
bundle exec thin -C /etc/thin/app2.yml start

按顺序执行这些步骤很重要,因为它们似乎彼此冲突(将它们作为服务运行,init.d仅启动一个,奇怪的是,将 a 放在sleep 60两个步骤之一中并没有什么区别,但无论如何)。

将下面的代码放在我的控制面板中似乎没有执行任何操作:

@reboot [app1path; bundle exec thin -C /etc/thin/app1.yml start; cd [app2path]; bundle exec thin -C /etc/thin/app2.yml start

什么会起作用?我将不胜感激一些提示和指导。

答案1

@reboot条目在启动时启动cron,但这并不意味着运行bundle应用程序所需的一切都已启动并运行。根据设置,例如您的网络当时可能尚未启动。

对于你的情况我会做以下事情:

  1. 让重新启动作业在某个已知位置写入一个唯一的文件
  2. 有一个定期执行的普通 cronjob,例如每 X 分钟执行一次。此作业检查唯一文件是否存在,并且已存在至少 Y 分钟。

如果该文件存在并且足够旧,则该文件将被删除并执行启动捆绑包的命令。通过检查,您可以确保您的命令仅启动一次,大约在重新启动后的 Y 到 X+Y 分钟之间。您可以将 X 减少到 1,将 Y 减少到 1 或 2,从而在重新启动后延迟 1 到 2-3 分钟(如果您的计算机需要更长的时间才能完全启动和运行,则应该采用更大的值)。

另一种方法是自己创建一个 init.d 作业并插入适当的链接,以便在此之前启动所有必要的服务。 (如何做到这一点取决于您的 Debian 系统使用的系统类型:systemdsysvinit其他)

相关内容