
나는 일부 파일이 포함된 디렉터리를 매일 백업하기 위해 이 작은 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 파일에 실제 스크립트를 넣지 않고 파일에 있는 스크립트를 참조합니다.