Linux 如何在CRON中指定时间?

Linux 如何在CRON中指定时间?,linux,cron,Linux,Cron,我的任务是在CRON考虑年份字段中指定时间。我该怎么做,或者你知道什么东西可以在我的linux服务器上帮助我吗?thxCrontab(5)文件格式没有年份字段。您可以尝试运行cron job@yearly(在元旦的00:00),它使用日期(1)查看当前年份,并将当前crontab文件更新为适合新年份的文件。标准cron不支持年份字段,但值得注意的是,一些实现支持扩展的crontab格式,并带有第六个年字段,例如。并非每个cron都是平等创建的 var task = cron.schedule('

我的任务是在CRON考虑年份字段中指定时间。我该怎么做,或者你知道什么东西可以在我的linux服务器上帮助我吗?thx

Crontab(5)文件格式没有年份字段。您可以尝试运行cron job@yearly(在元旦的00:00),它使用日期(1)查看当前年份,并将当前crontab文件更新为适合新年份的文件。

标准
cron
不支持年份字段,但值得注意的是,一些实现支持扩展的crontab格式,并带有第六个
字段,例如。并非每个cron都是平等创建的

var task = cron.schedule('0 0 1 1 *', () => {
    console.log('Printing this line 1ST JANUARY OF EVERY YEAR in the terminal');
});
4.这是一项值得考虑的工作。。
@mart7ini

如前几篇文章所述,您不能表示年份字段,但可以模拟它:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7)
# |  |  |  |  |
# *  *  *  *  *   command to be executed
  0  0  1  1  *   [[ $(date "+\%Y") == 2020 ]] && command1
  0  0  1  1  *   (( $(date "+\%Y") % 3 == 0  )) && command2
  0  0  1  1  *   (( $(date "+\%Y") % 3 == 1  )) && command3
这里,
command1
将在2020-01-01T00:00:00运行,
command2
将每3年在1月1日午夜运行一次,它将在2019、2022、2025……运行<代码>命令3
命令2
相同,但有一年的偏移量,即2020年、2023年、2026年

注意:不要忘记必须转义crontab文件中的-字符(
%
):

“第六个”字段(行的其余部分)指定要运行的命令。行的整个命令部分,直到换行符或 “
%
”字符将由
/bin/sh
或cronfile的
shell
变量中指定的shell执行。命令中的“
%
”字符(除非用反斜杠(
\
)转义)将更改为换行符,并且第一个
%
之后的所有数据将作为标准输入发送到命令

来源:
man5crontab


解决方法:每年运行一次,并将年度逻辑移动到脚本中。就我个人而言,我不会真正信任一个一年运行不到一次的计划任务。太多的事情可能会改变,直到你注意到它跳过了一次运行。完全同意你的观点,太多的事情可能会发生使用YEAR的另一个用例:如果你只想执行一次作业。@CodeFreezr,如果你想一次运行一个作业,你应该使用
at
而不是crontab
at
将一次性执行您的任务,与cron类似。但唯一需要的功能是轻松重写前后年份字段值。不幸的是,cumbrous Logic可能值得一提的是,我必须使用反斜杠才能使日期评估生效(在
crontab-e
中;而它在bash中直接运行良好):
[[$(日期“+\%Y”)
@Kamafeather如果您是正确的,您必须在cron中避开
%
。@Kamafeather评论不错。值得将其添加到您的答案中。谢谢。