크론 작업이 작동하지 않습니다

크론 작업이 작동하지 않습니다

Docker 컨테이너를 실행하는 NAS에서 백업 스크립트를 개발 중입니다. 내 컨테이너 내에서 /etc/crontab을 사용하여 cron을 실행합니다.

root@backups-nas:/code# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

0 * * * * root /code/backup.sh

또한 내 작업이 나타나는 /var/log/syslog에서 로그를 찾을 수 있도록 syslog-ng를 설치했습니다.

root@backups-nas:/code# tail -f /var/log/syslog 
==> /var/log/syslog <==
Mar 24 19:00:01 backups-nas CRON[9250]: (root) CMD (/code/backup.sh)

내 스크립트의 내용은 다음과 같습니다.

root@backups-nas:/code# cat backup.sh
#!/bin/bash
python3 /code/backup.py all >> /code/log/$(date +\%d-\%m-\%Y).log

하지만 밤에는 /code/log/$(date +\%d-\%m-\%Y).log에 새로운 로그 기록자가 없으며 작업이 완료되지 않습니다. /etc/crontab 라인을 수동으로 실행하려고 하면 작동합니다.

무슨 일이 일어난 것 같나요? 미리 감사드립니다

편집하다:

나는 다음과 같이 backup.py를 편집했습니다.

#!/usr/local/bin/python3

from sys import argv
import datetime

스크립트를 직접 실행하면 작동하지만 /var/log/syslog.txt의 줄에도 불구하고 cron이 실행되지 않습니다.

답변1

시스템 crontab 파일에서 변수 값 PATH/sbin:/bin:/usr/sbin:/usr/bin. 이것은 실제로아니요인터프리터 경로를 포함하세요 python3.당신은 말한다에 누워있다 /usr/local/bin/python3.

이는 다음 중 하나를 수행해야 함을 의미합니다.

  • 에 추가하세요. Python 백업 스크립트를 호출하기 전에 이 줄을 수정하여 crontab 파일에서 이 작업을 /usr/local/bin수행 (시스템 crontab 파일의 모든 작업에 영향을 미침) 을 사용하는 스크립트에서 이 작업을 수행할 수 있습니다.PATHPATH=backup.shPATH=$PATH:/usr/local/bin
  • Python 스크립트를 호출할 때 아래와 같이 명시적인 경로와 함께 Python 인터프리터를 사용하세요.

    /usr/local/bin/python3 /code/backup.py all >> "/code/log/$(date +%d-%m-%Y).log"
    

    ( %여기의 문자는 이스케이프 처리할 필요가 없습니다.)

  • 명시적인 인터프리터를 전혀 지정하지 않고 스크립트의 -line #!에 지정된 인터프리터를 사용합니다./code/backup.py

    /code/backup.py all >> "/code/log/$(date +%d-%m-%Y).log"
    

    이는 스크립트의 첫 번째 줄이 이고 스크립트가 실행 가능함( )에 backup.py의존 #!/usr/local/bin/python3합니다 chmod +x /code/backup.py.

이러한 변형 중에서 "최고"(개인 의견)가 마지막입니다.

답변2

방금 해결되었습니다! 디버깅할 수 있고, .sh가 아닌 /etc/crontab에 tmp에 로그를 추가할 수 있습니다.

문제는 간단합니다. 절대 경로 대신 상대 경로를 사용하고 있습니다. 하지만 내 .sh 내부의 에코에는 아무것도 표시되지 않습니다.

관련 정보