将cron设置为在crontab上午5点运行

时间:2015-05-15 16:18:40

标签: cron crontab

我是第一次在crontab上和cron一起工作,我想知道是否可以在特定时间每天运行一次,比如说太平洋标准时间下午5点?

这是我尝试的但是如何基于PST时间?

process.cwd()

3 个答案:

答案 0 :(得分:1)

crontab条目将根据您运行它的系统的系统时间运行。如果您的服务器时间设置为太平洋时间(请注意,美国目前是夏令时,而不是标准时间),那么它将在指定时间运行。如果您的服务器的时间设置为其他时间(例如UTC或东部时间等),那么您需要进行一些时区数学运算,以便在您希望它在任何时间运行时运行作业你希望它运行的区域。

另请注意,您的问题指定您希望作业在 5pm 运行,但您注意到的0 5 * * *的crontab条目将在凌晨5点运行系统的时区。如果您希望它在 5pm 运行,则crontab条目应为0 17 * * *

答案 1 :(得分:0)

cron使用24小时,也称为美国的军事时间。其中0 0 * * *为午夜,0 12 * * *为下午12点。如果您的服务器位于另一个时区(例如+2),您可以随时调整代码,以补偿您希望应用程序运行的位置。

答案 2 :(得分:0)

引用crontab(5)手册页(here或输入man 5 crontab以确保您查看了系统的正确文档):

  

cron守护程序以定义的时区运行。它目前没有   支持每用户时区。所有任务:系统和用户都将是   根据配置的时区运行。即使用户指定了   TZ crontab中的crontab环境变量只影响   crontab中执行的命令,而不是0 0 * * *的执行   任务本身。

因此,如果系统默认配置为使用UTC,则crontab中的时间规范将使用UTC,而不是本地时间。没有直接的方法可以避免这种情况(除了通过改变系统时区,但当然会产生其他影响)。

如果您希望您的工作在当地时间下午5点(17:00)运行,您可以将其安排为相当于该时间的UTC(0 * * * *将在午夜UTC运行,即PDT 17:00 )。但是,这不会针对夏令时转换进行调整。

或者您可以安排作业每小时运行一次(CRON_TZ),然后让作业本身检查当地时间,如果当前时间不是您想要的,则不执行任何操作。编写一个调用命令的小包装脚本可能是执行此操作的最佳方法。不要以为你的工作会在一小时内完全运行。延迟一秒左右是常见的。对于每小时工作,检查当前时间是否与预期时间的一分钟相关可能是合理的。

This man page提到了一个django.contrib.sessions.backends.cache环境变量,但似乎除了大多数Linux系统使用的Vixie cron之外的某些实现。)