Cron 不在特定日期运行,而是在所有其他日期运行

Sna*_*Doc 8 cron shell-script

我有一个 cron 设置,每天晚上 10 点执行一个 bash 脚本。我有另一个 cron 设置要在每个月的 1 号每月运行一次。两个 cron 都启动一个 bash 脚本,而 bash 脚本中唯一不同的是它们传递给底层 java 程序的参数(模拟 java 程序的命令行启动)。

问题是,我需要在每个月的 1 号以某种方式禁用每日 cron,这样两者就不会尝试在同一天运行。这可以自动完成吗?

我想我可以在第一个之前创建另一个 bash 脚本来编辑 cron,然后再重新设置它,但这似乎......不干净。

slm*_*slm 10

与@StephaneChazelas 在评论中提出的解决方案类似,您可以将第三个字段中的天数范围指定为除每月 1 日之外的每天要运行的 cron 的范围。

以下两个条目将完成您所追求的:

   0 22 1 * *      /path/to/script/1st_of_the_month.bash    
   0 22 2-31 * *   /path/to/script/every_day_except_1st.bash
Run Code Online (Sandbox Code Playgroud)


sus*_*tus 8

解决这个问题的最简单方法是只有一个 cron 条目。修改 bash 脚本以检查日期 - 如果它是每月的 1 号,则使用每月参数调用 java 程序,否则使用每日参数调用程序。

更改脚本使过程更简单,因为脚本作为文档将更好地描述正在发生的事情,而无需 cron 表中的其他信息。

脚本模组可能看起来像这样-:

if [ $(date '+%d') == "1" ];then
   # monthly code
else
   # daily code
fi
Run Code Online (Sandbox Code Playgroud)