cronjob没有每天运行

我是一个Linux新手。 这就是说,我需要一个cronjob来压缩一些系统日志文件48小时后,以保持可pipe理的大小。 这些文件当前位于/ 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 # mh 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) 

我想知道如果格式是什么搞砸了我?

在此先感谢您的帮助。

正如Sven所说,更好的解决scheme是使用logrotate或为此devise的类似工具。

但是,为了解释,有两个问题。
你没有指定一个用户作为cron应该运行。

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

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

所以这:

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

应该pipe用。

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

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