
Se supone que tengo un trabajo cron que activa un script de shell diariamente a las 2 a. m.
0 2 * * * /root/bin/script.sh
Sin embargo, no funciona en absoluto. ¿Qué me estoy perdiendo?
Más detalles: el script funciona bien sin programación cron cuando se ejecuta manualmente y hace lo que se supone que debe hacer. El usuario root está ejecutando el trabajo cron. El trabajo cron fue programado por crontab -e
un root
usuario. pgrep cron
proporciona una identificación de servicio que significa que el servicio cron se está ejecutando. A continuación se muestra el contenido del /root/bin/script.sh
archivo:
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
De hecho, moví el guión de /etc/cron.daily/
a /root/bin
. ¿Se supone que el script debe estar disponible /etc/cron.daily
solo para ejecución diaria?
Respuesta1
Mi conjetura es que el shell no entiende correctamente su script, porque no tiene ningún tinglado adecuado. Intenta usar crontab -e
con esto en su lugar:
0 2 * * * bash /root/bin/script.sh > /tmp/crontest.log 2>&1
Al invocar el script directamente usando bash, el script debería funcionar bien ahora. Cualquier salida también debería terminar registrada /tmp/crontest.log
, lo que podría ayudar un poco con la depuración si aún no funciona.