Я новичок в Linux. С учетом сказанного мне нужно cronjob для сжатия некоторых файлов системного журнала через 48 часов, чтобы сохранить размер управляемым. Эти файлы в настоящее время находятся в / 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)
Мне интересно, форматирование ли меня портит?
Заранее благодарю за любую помощь.
Как сказал Свен, лучшим решением было бы использовать logrotate
или аналогичные инструменты, предназначенные для этого.
Однако для пояснения есть две проблемы.
Вы не указали пользователя, от имени которого должен работать cron.
А во-вторых %F
часть.
Вам нужно избежать%, как описано в man 5 crontab
:
«Шестое» поле (оставшаяся часть строки) определяет команду, которую нужно запустить. Вся командная часть строки, вплоть до новой строки или символа%, будет выполняться / bin / sh или оболочкой, указанной в переменной SHELL файла cron. Знаки процента (%) в команде, если они не экранированы обратной косой чертой (\), будут заменены на символы новой строки, а все данные после первого% будут отправлены команде как стандартный ввод.
Итак, это:
0 1 * * * root /bin/gzip /syslog/*-$(/bin/date --date='2 days ago' +\%F)
Должно сработать.
Вы забыли добавить пользователя для выполнения этого задания, исправьте это:
0 1 * * * root /bin/gzip /syslog/*-$(/bin/date --date='2 days ago' +%F)