![每3天在 Crontab 中运行一次脚本](https://linux22.com/image/799867/%E6%AF%8F3%E5%A4%A9%E5%9C%A8%20Crontab%20%E4%B8%AD%E8%BF%90%E8%A1%8C%E4%B8%80%E6%AC%A1%E8%84%9A%E6%9C%AC.png)
我有一些 Perl 脚本需要每 3 天运行一次,以下是我输入的语法,请告诉我,这是正确的还是错误的。
30 19 * * */3 root /var/scripts/svn_backup.pl
答案1
错了。最后一列是星期几。你可能想移到*/3
第三列(月份日期):
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)
答案2
*/3 在错误的列中,您的规范应该是
30 19 */3 * * root /var/scripts/svn_backup.pl
*/3 语法与 1,4,7 ... 25,28,31 相同。请注意,有些月份它会在 31日运行,而下个月它会在 1日运行,因为间隔规范不会换行,它们总是从序列的开头开始。在这种情况下,您的脚本会在没有所需间隔的情况下运行。
如果您需要每 3 天运行一次,那么您必须每天运行脚本并让其确定是否已经过去 3 天并根据需要退出/继续。
在 perl 中你可以做类似的事情
if ( int (time/86400)%3 != 0) {exit 0};
它将根据 UNIX 纪元每 3 天运行一次脚本。