Почему этот скрипт в cron.daily не запускается?

Почему этот скрипт в cron.daily не запускается?

Я написал этот небольшой скрипт на Python для ежедневного резервного копирования каталога, содержащего некоторые файлы (резервные копии должны обновляться раз в неделю). Вот он:

$ 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 запускает все исполняемые файлы, названные в рамках ограничений, описанных ниже, найденные в каталоге directory. Другие файлы и каталоги молча игнорируются.

Если не указана ни опция --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-файл, обычно я ссылаюсь на скрипт в файле.

Связанный контент