
У меня есть задание cron, которое должно запускать скрипт оболочки ежедневно в 2 часа ночи.
0 2 * * * /root/bin/script.sh
Однако это вообще не работает. Что я упускаю?
Дополнительные сведения: Скрипт отлично работает без планирования cron при ручном запуске и делает то, что должен делать. Пользователь root запускает задание cron. Задание cron было запланировано пользователем crontab -e
as root
. pgrep cron
дает идентификатор службы, который означает, что служба cron запущена. Ниже приведено содержимое файла /root/bin/script.sh
:
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
На самом деле я переместил скрипт из /etc/cron.daily/
в /root/bin
. Скрипт должен быть /etc/cron.daily
только для ежедневного выполнения?
решение1
Я предполагаю, что ваш скрипт не понимается оболочкой должным образом, поскольку в нем нет правильного shebang. Попробуйте использовать crontab -e
это вместо этого:
0 2 * * * bash /root/bin/script.sh > /tmp/crontest.log 2>&1
Вызов скрипта напрямую с помощью bash должен теперь работать нормально. Любой вывод должен /tmp/crontest.log
также быть записан в журнал, что может немного помочь с отладкой, если он все еще не работает.