Linux 如何在CRON中指定时间?
我的任务是在CRON考虑年份字段中指定时间。我该怎么做,或者你知道什么东西可以在我的linux服务器上帮助我吗?thxCrontab(5)文件格式没有年份字段。您可以尝试运行cron job@yearly(在元旦的00:00),它使用日期(1)查看当前年份,并将当前crontab文件更新为适合新年份的文件。标准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
不支持年份字段,但值得注意的是,一些实现支持扩展的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
而不是crontabat
将一次性执行您的任务,与cron类似。但唯一需要的功能是轻松重写前后年份字段值。不幸的是,cumbrous Logic可能值得一提的是,我必须使用反斜杠才能使日期评估生效(在crontab-e
中;而它在bash中直接运行良好):[[$(日期“+\%Y”)
@Kamafeather如果您是正确的,您必须在cron中避开%
。@Kamafeather评论不错。值得将其添加到您的答案中。谢谢。