trabalho cron quebrado após editá-lo

0

Estou tendo algumas dificuldades em entender por que o cronjob a seguir não funciona mais:

30 3 * * * /path/to/backup_script.sh && tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$(date '+%Y%m%dT%H%M%S').tar.gz -C /path/to/source/backup/folder/ .

Se eu o executar manualmente usando o mesmo usuário que possui o crontab, ele funciona. Parou para funcionar quando eu editei há alguns dias atrás adicionando && tar -czvf [...]

devo chamar de maneira diferente o comando date ? ou escape do $ (vou testar isso agora, só notei)?

Graças a David Sánchez Martín, achei o log específico, ele informa o seguinte erro:

/bin/sh: 1: Syntax error: Unterminated quoted string
    
por lese 21.01.2016 / 09:31

2 respostas

2

Os símbolos % são especiais em uma entrada crontab , portanto você não pode usá-los diretamente na sua string date format.

man 5 crontab escreve

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.

    
por 21.01.2016 / 11:06
2

Primeiro, para depurar e monitorar isso, como regra geral, adicione uma variável MAILTO no crontab, caso um problema surja no erro padrão, ele envia um e-mail para você.

# crontab -e
[email protected]
30 3 * * * /usr/local/bin/blahblah.sh

Observe também que, se o comando gerar algo na saída padrão, você poderá redirecioná-lo para null se não desejar isso no seu e-mail.

30 3 * * * /usr/local/bin/blahblah.sh > /dev/null

Então, provavelmente, se você não tiver certeza do comando, faça a coisa da data uma variável, como esta

30 3 * * * /path/to/backup_script.sh && THEDATE=$(date +%Y%m%dT%H%M%S) tar -czvf /path/to/archived/backups/retain_last_3_backups/backup-community_$THEDATE).tar.gz -C /path/to/source/backup/folder/ .

Acho mais legível e você não tem uma variável à espreita.

    
por 21.01.2016 / 09:51

Tags