
Eu tenho um cron job que deve acionar um script de shell diariamente às 2 da manhã.
0 2 * * * /root/bin/script.sh
No entanto, não funciona de todo. o que estou perdendo?
Mais detalhes: O script funciona bem sem agendamento do cron quando executado manualmente e faz o que deveria fazer. O usuário root está executando o cron job. O cron job foi agendado por crontab -e
usuário root
. pgrep cron
fornece um ID de serviço, o que significa que o serviço cron está em execução. A seguir está o conteúdo do /root/bin/script.sh
arquivo:
BACKUP_LOG=/var/log/backup.log
exec 1> >(while IFS= read -r line; do echo "$(date --rfc-3339 ns) $line"; done | tee -a ${BACKUP_LOG}) 2>&1
# Back up the etc directory
mkdir /home/directory1/backup/etc_backup
cp -Lrp /etc /home/data/backup/etc_backup
tar czf /home/data/backup/etc_backup.tgz
/home/data/backup/etc_backup
rm -rf /home/data/backup/etc_backup
Na verdade, mudei o script de /etc/cron.daily/
para /root/bin
. O script deveria estar disponível /etc/cron.daily
apenas para execução diária?
Responder1
Meu palpite é que seu script não está sendo compreendido corretamente pelo shell, porque ele não possui nenhuma explicação adequada. Tente usar crontab -e
com isto:
0 2 * * * bash /root/bin/script.sh > /tmp/crontest.log 2>&1
Ao invocar o script diretamente usando o bash, o script deve funcionar bem agora. Qualquer saída também deve ser registrada /tmp/crontest.log
, o que pode ajudar um pouco na depuração se ainda não funcionar.