cronjob 没有每天运行

cronjob 没有每天运行

我是 Linux 新手。话虽如此,我需要一个 cronjob 在 48 小时后压缩一些 syslog 文件以使其大小易于管理。这些文件当前位于 /syslog - 我添加的一个用于处理卷的磁盘。我之前问过一个问题来处理这个问题,但之后我在这里,cronjob 没有运行。它应该在几个小时前运行。我相信该作业设置为每天 01:00:00 运行。这是我当前的 crontab。

root@mysyslogserver:/etc# more crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
0 1 * * * /bin/gzip /syslog/*-$(/bin/date --date='2 days ago' +%F) 

我想知道格式是否让我陷入了困境?

在此先感谢您的帮助。

答案1

正如斯文所说,更好的解决方案是使用logrotate或类似为此设计的工具。

但是,为了便于解释,有两个问题。
您没有指定 cron 应以哪个用户身份运行。

其次是%F部分。
您需要转义 %,如下所述man 5 crontab

“第六个”字段(行的其余部分)指定要运行的命令。行的整个命令部分(直到换行符或 % 字符)将由 /bin/sh 或 cronfile 的 SHELL 变量中指定的 shell 执行。除非使用反斜杠 (\) 转义,否则命令中的百分号 (%) 将更改为换行符,并且第一个 % 之后的所有数据将作为标准输入发送到命令。

所以这:

 0 1 * * * root /bin/gzip /syslog/*-$(/bin/date --date='2 days ago' +\%F)

应该管用。

答案2

您忘记添加运行该作业的用户,请更正:

0 1 * * * root /bin/gzip /syslog/*-$(/bin/date --date='2 days ago' +%F)

相关内容