我是一个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)
我想知道格式是否让我感到困惑?
提前感谢您的帮助。
正如 Sven 所说,更好的解决方案是使用
logrotate
为此设计的或类似的工具。然而,为了解释,有两个问题。
您没有指定 cron 应该运行的用户。
其次是
%F
部分。您需要转义 %,如下所述
man 5 crontab
:所以这:
应该管用。
您忘记添加运行该作业的用户,更正它:
0 1 * * * root /bin/gzip /syslog/*-$(/bin/date --date='2 days ago' +%F)