我有一项任务需要按照我的项目时间表(3 周)执行。
我可以设置cron每周或(例如)在每个月的第三周执行此操作 - 但找不到每三周执行此操作的方法。
我可以破解脚本来创建临时文件(或类似文件),这样它就可以算出它是第三次运行了 - 但这个解决方案很糟糕。
可以以干净的方式完成吗?
crontab 文件只允许您指定:
minute (0-59)
hour (0-23)
day of the month (1-31)
month of the year (1-12)
day of the week (0-6 with 0=Sunday)
Run Code Online (Sandbox Code Playgroud)
因此无法指定应适用哪些周。
编写包装脚本可能是最好的选择。
您可以使用以下命令在 shell 脚本中获取周数
date +%U
Run Code Online (Sandbox Code Playgroud)
或者
date +%V
Run Code Online (Sandbox Code Playgroud)
取决于您希望每周从周日还是周一开始。
所以你可以使用
week=$(date +%V)
check=$(( ($week - 1) % 3 ))
Run Code Online (Sandbox Code Playgroud)
并且 $check 在一年中的第 1、4、7、... 周为 0。
感谢之前的回答,已指出日期 -e 的纪元选项或格式化为 %s
虽然有点痛苦((date +%s) / 86400)给天离时代。
依靠同时运行的每周作业,可以轻松地根据 3 周期间的特定日期进行检查($epoch_day%21 == 13例如)
就我而言,这很好,因为这是一次性任务。如果错过了特定的一天,则无需在下一个机会运行。