cron.daily의 이 스크립트가 실행되지 않는 이유는 무엇입니까?

cron.daily의 이 스크립트가 실행되지 않는 이유는 무엇입니까?

나는 일부 파일이 포함된 디렉터리를 매일 백업하기 위해 이 작은 Python 스크립트를 작성했습니다(백업은 1주일 후에 순환되어야 합니다). 이거 야:

$ cat /etc/cron.daily/file-store-backup.py
#!/usr/bin/python3

import datetime
import calendar
import subprocess
import os.path

def main():
    origin = '/var/file-store'
    today_name = calendar.day_name[datetime.date.today().weekday()]
    dest = '/var/file-store-backup/' + today_name

    if os.path.exists(dest):
        subprocess.call(['rm', '-rf', dest])

    subprocess.call(['cp', '--reflink=always', '-a', origin, dest])
    subprocess.call(['touch', dest])

    last = open('/var/file-store-backup/LAST', 'w')
    print(today_name, file=last)

if __name__ == "__main__":
    main()

수동으로 실행하면 예상대로 작동하여 이번 주의 요일 이름을 딴 백업 디렉터리가 생성되지만 매일 실행되지는 않습니다. /etc/cron.daily에 3일 동안 그대로 두었고 그 이후에는 백업 디렉터리가 생성되지 않았습니다. , 서버는 항상 켜져있었습니다.

권한이 옳습니다.

$ ls -l /etc/cron.daily/file-store-backup.py 
-rwxr-xr-x 1 root root 553 Abr 11 17:19 /etc/cron.daily/file-store-backup.py

시스템은 Ubuntu Server 12.04.2 LTS이며 설치 이후 cron 구성이 변조되지 않았습니다.

스크립트가 실행되지 않는 이유는 무엇입니까?

답변1

스크립트에 .py확장자가 있기 때문에 이런 일이 발생합니다. 의 파일은 /etc/cron.daily다음에 의해 실행됩니다.실행 부분(8)명령이며 기본값은 다양한 규칙과 일치하지 않는 프로그램을 무시하는 것입니다. 확장 프로그램 만 제거하면 됩니다 .py.

run-parts는 디렉터리 디렉터리에 있는 아래 설명된 제약 조건 내에서 이름이 지정된 모든 실행 파일을 실행합니다. 다른 파일과 디렉터리는 자동으로 무시됩니다.

--lsbsysinit 옵션이나 --regex 옵션이 모두 지정되지 않은 경우 이름은 ASCII 대문자 및 소문자, ASCII 숫자, ASCII 밑줄 및 ASCII 빼기 하이픈으로 구성되어야 합니다.

예를 들어

touch /etc/cron.daily/test.py
chmod +x /etc/cron.daily/test.py
run-parts --test /etc/cron.daily
/etc/cron.daily/apache2
...

test.py의 흔적이 없습니다

mv /etc/cron.daily/test.py /etc/cron.daily/test
run-parts --test /etc/cron.daily 
/etc/cron.daily/apache2
...
/etc/cron.daily/test

따다!

답변2

cron 항목이 다음과 같아야합니까? 0 * * * 1-7 root /etc/cron.daily/file-store-backup.py

저는 보통 cron 파일에 실제 스크립트를 넣지 않고 파일에 있는 스크립트를 참조합니다.

관련 정보