EOF inesperado ao procurar correspondência '' 'para o trabalho cron

1

Eu estou lutando com um cronjob que não funciona. Toda vez que quando é executado, recebe uma mensagem de erro dizendo

/bin/sh: -c: line 0: unexpected EOF while looking for matching '"'
/bin/sh: -c: line 1: syntax error: unexpected end of file

Meu crontab é esse aqui:

# Delete logfile from last week
00 21 * * * rm /var/log/dumping_$(date -d @$(( $(date "+%s") + 86400 )) "+%u").log

Eu tentei várias opções, por exemplo

00 21 * * * 'rm /var/log/dumping_$(date -d @$(( $(date "+%s") + 86400 )) "+%u").log'

00 21 * * * /bin/bash -c 'rm /var/log/dumping_$(date -d @$(( $(date "+%s") + 86400 )) "+%u").log'

Nenhum deles funcionou como cronjob. Claro, está funcionando quando eu entro diretamente na linha de comando. Qual seria a sintaxe correta?

    
por Wernfried Domscheit 01.07.2016 / 08:38

2 respostas

2

% tem um significado especial em cronjobs - significa que o texto depois é dado como stdin ao comando anterior. Para usar um sinal de porcentagem literal, tente \ escapar ou simplesmente mova tudo para um script externo e chame esse do crontab.

(IMHO, quando nidifica $ (...) mais de duas vezes, é um sinal claro de que deve ser extraído em um script.)

Observe que você também pode usar date -d tomorrow +%u em vez de calculá-lo manualmente.

    
por 01.07.2016 / 09:10
0

A principal diferença é que o seu shell, quando executado manualmente, provavelmente é bash, enquanto o padrão do cron é sh. Eu não posso dizer com certeza que esta é a fonte do problema, mas visto que sua linha é um tanto complexa (como em um monte de caracteres especiais que podem ou não ser interpretados diferentemente entre vários shells e interpretadores), você pode se beneficiar o comando rm com todos os seus argumentos em um script e chamando o script do cron. Pelo menos essa seria a primeira coisa que eu tentaria.

    
por 01.07.2016 / 08:53

Tags