Por que este script no cron.daily não funciona?

Por que este script no cron.daily não funciona?

Eu escrevi este pequeno script Python para fazer backups diários de um diretório contendo alguns arquivos (os backups devem ser alternados após uma semana). É isso:

$ 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()

quando executo manualmente, funciona conforme o esperado, criando um diretório de backup com o nome do dia da semana atual, mas não está sendo executado diariamente: deixei dentro de /etc/cron.daily por 3 dias e depois disso nenhum diretório de backup foi criado , o servidor estava ligado o tempo todo.

As permissões estão certas:

$ 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

O sistema é Ubuntu Server 12.04.2 LTS e a configuração do cron não foi adulterada desde a instalação.

Por que o script não está sendo executado?

Responder1

Isso está acontecendo porque seu script possui uma .pyextensão. Os arquivos /etc/cron.dailysão executados pelopeças de execução (8)comando e seu padrão é ignorar programas que não correspondem a várias regras. Você deve conseguir apenas remover a .pyextensão.

run-parts executa todos os arquivos executáveis ​​nomeados dentro das restrições descritas abaixo, encontrados no diretório directory. Outros arquivos e diretórios são ignorados silenciosamente.

Se nem a opção --lsbsysinit nem a opção --regex forem fornecidas, os nomes deverão consistir inteiramente em letras maiúsculas e minúsculas ASCII, dígitos ASCII, sublinhados ASCII e hífens menos ASCII.

Por exemplo

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

nenhum sinal de 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

ta sim!

Responder2

A entrada do cron não deveria parecer 0 * * * 1-7 root /etc/cron.daily/file-store-backup.py

Normalmente não coloco o script real no arquivo cron, geralmente me refiro ao script no arquivo.

informação relacionada