Cron job bad dia do mês

0

Estou trabalhando em um script que irá instalar / configurar o cron job para o mysql backup

Este é o meu script

croncmd="5 1 * * * sudo /usr/local/sbin/mysqlFullBackup.sh > /var/log/mysql/mysqlFullBackupCron.log 2>&1"

if [[ $(crontab -l | egrep -v "^(#|$)" | grep -q "$croncmd"; echo $?) == 1 ]]
then
    echo $(crontab -l ; echo "$croncmd") | crontab -
fi

O problema é que eu continuo recebendo erros no mau dia do mês

"-":0: bad day-of-month
errors in crontab file, can't install.

Você pode, por favor, me ajudar a configurar corretamente meu cron job para que ele funcione todos os dias às 01:10 da noite.

Se você precisar de informações adicionais, entre em contato e eu fornecerei.

Obrigado

    
por Davor Bramor Pečnik 09.11.2017 / 11:08

1 resposta

3

O script é desnecessariamente complicado. Você poderia fazer:

croncmd='5 1 * * * sudo /usr/local/sbin/mysqlFullBackup.sh > /var/log/mysql/mysqlFullBackupCron.log 2>&1'

if ! crontab -l | egrep -v '^(#|$)' | grep -Fq "$croncmd"
then
    ( crontab -l; echo "$croncmd" ) | crontab -
fi

Quando você executa echo $(crontab -l; echo "$croncmd") , sem nenhuma aspas, o conteúdo será submetido à expansão de divisão de campo e curinga quando o shell o expandir. Portanto, qualquer * será expandido para os nomes de arquivos no diretório atual, por exemplo:

$ echo $(echo "*")
bin Desktop dev Documents Downloads examples.desktop Music Pictures Public snap Templates Videos

É mais fácil e simples usar um comando composto - ( crontab -l; echo "$croncmd" )" and send the output to crontab 'diretamente, sem usar um eco adicional.

Também com grep , você não deseja que o grep trate 5 1 * como uma expressão regular, então use a opção -F .

    
por muru 09.11.2017 / 11:19