매일 오전 2시에 쉘 스크립트를 실행하도록 되어 있는 크론 작업이 있습니다.
0 2 * * * /root/bin/script.sh
그러나 전혀 작동하지 않습니다. 내가 무엇을 놓치고 있나요?
자세한 내용: 수동으로 실행하면 스크립트는 크론 예약 없이 정상적으로 실행되며 예상되는 작업을 수행합니다. 루트 사용자가 cron 작업을 실행 중입니다. cron 작업은 crontab -e
사용자 에 의해 예약됩니다 root
. pgrep cron
서비스 ID가 주어지면 이는 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
, 여전히 작동하지 않는 경우 디버깅에 도움이 될 수 있습니다.