cronjob não está sendo executado diariamente

1

Eu sou um novato no Linux. Com isso dito, eu preciso de um cronjob para compactar alguns arquivos syslog após 48 horas para manter o tamanho gerenciável. Esses arquivos estão atualmente localizados em / syslog - um disco que adicionei para lidar com o volume. Eu tinha pedido uma pergunta anterior para lidar com isso, mas aqui estou depois disso e o cronjob não foi executado. Deveria ter corrido horas atrás. Eu acredito que o trabalho foi definido para ser executado às 01:00:00 diariamente. Aqui está o meu crontab atual.

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) 

Eu estou querendo saber se a formatação é o que está me atrapalhando?

Agradecemos antecipadamente por qualquer ajuda.

    
por Security_Pete 02.01.2015 / 14:29

2 respostas

2

Como Sven disse, a melhor solução seria usar logrotate ou ferramentas similares projetadas para isso.

No entanto, para explicar, existem dois problemas.
Você não especificou um usuário como o cron deve ser executado.

E, em segundo lugar, a parte %F .
Você precisa escapar do%, conforme descrito em man 5 crontab :

The "sixth" field (the rest of the line) specifies the command to be run. The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

Então, isso:

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

Deve funcionar.

    
por 02.01.2015 / 15:06
0

Você esqueceu de adicionar um usuário para executar esse trabalho, corrija-o:

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

    
por 02.01.2015 / 15:21