每3天在 Crontab 中运行一次脚本

每3天在 Crontab 中运行一次脚本

我有一些 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 天运行一次脚本。

相关内容