如何在同一台服务器的多个环境中运行相同的cronjob?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在同一台服务器的多个环境中运行相同的cronjob?相关的知识,希望对你有一定的参考价值。

我使用过Rails 5,Capistrano Gem和Whenever Gem。我有一个有多个环境的服务器。

当我通过capistrano更新服务器上的crontab时,它会覆盖它在多个环境中运行cron作业。

示例:当我在服务器上通过crontab -l命令检查时

我也看到了

# Begin Whenever generated tasks for: /home/bhargav/sites/tenpo_api_mdsql/releases/20180227112937/config/schedule.rb at: 2018-02-27 20:30:24 +0900
0 16 * * * /bin/bash -l -c 'cd /home/bhargav/sites/tenpo_api_mdsql/releases/20180227112937 && bundle exec bin/rails runner -e production '\''TDayTenAsnSiireJissekiHeader.asn_siire_jidou_chakka'\'' >> log/cron_log.log 2>> log/cron_error_log.log'

# End Whenever generated tasks for: /home/bhargav/sites/tenpo_api_mdsql/releases/20180227112937/config/schedule.rb at: 2018-02-27 20:30:24 +0900

OR

# Begin Whenever generated tasks for: /home/bhargav/staging-sites/tenpo_api_mdsql/releases/20180227112656/config/schedule.rb at: 2018-02-27 20:27:33 +0900
0 16 * * * /bin/bash -l -c 'cd /home/bhargav/staging-sites/tenpo_api_mdsql/releases/20180227112656 && bundle exec bin/rails runner -e development '\''TDayTenAsnSiireJissekiHeader.asn_siire_jidou_chakka'\'' >> log/cron_log.log 2>> log/cron_error_log.log'

# End Whenever generated tasks for: /home/bhargav/staging-sites/tenpo_api_mdsql/releases/20180227112656/config/schedule.rb at: 2018-02-27 20:27:33 +0900
答案

在schedule.rb文件中,添加以下行仅在生产中使用它,

set :environment, :production

或者您可以指定不同的环境来运行不同的crons,如下所示,

if Rails.env.production?
  every 1.day, :at => '12.00 am' do
    runner 'Name.update'
  end
end
另一答案

我通过以下代码解决了这个问题。

如果您的环境位于要为其命名的同一服务器上,或者在部署时它们将相互覆盖,则会发生此问题:

如果卡皮斯特拉诺V2

set :never_identifier,defer {“#{application} _#{stage}”}

如果卡皮斯特拉诺V3

set :never_environment, - > {“#{fetch(:stage)}”}

以上是关于如何在同一台服务器的多个环境中运行相同的cronjob?的主要内容,如果未能解决你的问题,请参考以下文章

同一台服务器(电脑)运行多个Tomcat

你有想过在同一台服务器中,同时多开几个tomcat吗

如何使用 docker 和 nginx 在同一台服务器上运行多个站点?

同一台电脑上运行多个tomcat,环境变量以及文件内容更改的相关配置(perfect)

如何让多个域名解析到同一台服务器上的不同网站

RPC over TCP 与同一台机器上的多个客户端