问题描述
需要使用Cron来安排三个不同的脚本定期运行。他希望这些脚本每三周的星期一中午运行一次。他需要三个Cron语句来分别分配给这三个脚本。用户已经找到了一个在每三周的星期六运行的Cron语句,但不确定如何修改以满足自己的需求。此外,用户正在使用这个Cron语句来从GitLab计划中启动一个GitLab作业,而GitLab只接受Cron参数来设置作业的运行时间。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
要在每三周的星期一中午运行脚本,可以使用以下Cron语句:
0 12 * * 1 [ $(($(date +\%s) / (3600 * 24 * 7 * 3))) -eq $((($(date -d "2022-01-01" +\%s) / (3600 * 24 * 7 * 3)) + 1)) ] && /path/to/script1
0 12 * * 1 [ $(($(date +\%s) / (3600 * 24 * 7 * 3))) -eq $((($(date -d "2022-01-01" +\%s) / (3600 * 24 * 7 * 3)) + 2)) ] && /path/to/script2
0 12 * * 1 [ $(($(date +\%s) / (3600 * 24 * 7 * 3))) -eq $((($(date -d "2022-01-01" +\%s) / (3600 * 24 * 7 * 3)) + 3)) ] && /path/to/script3
上述Cron语句中的/path/to/script1
,/path/to/script2
和/path/to/script3
分别代表你的三个脚本的路径。这些语句使用了日期计算来确定是否应该运行脚本。请注意,这些语句假设你的系统的日期和时间设置正确,并且你的系统上安装了date
命令。
方案2
使用Cron的
@reboot
特殊字符串可以在系统启动时运行脚本。但是,这种方法不会考虑到每三周的星期一的要求。因此,方案1是更适合的解决方案。
方案3
如果你的系统上安装了
anacron
,你可以使用它来运行每三周的星期一的脚本。anacron
是一个用于在系统启动时运行延迟任务的工具。你可以创建一个anacrontab
文件来配置每三周的星期一运行脚本。以下是一个示例anacrontab
文件的内容:
# /etc/anacrontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
1 0 myjob /path/to/script1
1 0 myjob /path/to/script2
1 0 myjob /path/to/script3
上述示例中的/path/to/script1
,/path/to/script2
和/path/to/script3
分别代表你的三个脚本的路径。这些语句将在每三周的星期一运行脚本。请注意,你需要将myjob
替换为你自己的作业名称。
请注意,anacron
默认情况下在系统启动时运行,但也可以通过anacron
命令手动运行。
以上是使用Cron在每三周的星期一中午运行脚本的解决方案。根据你的需求选择适合你的方案,并将相应的脚本路径替换为你自己的脚本路径。