Por que esse script no cron.daily não será executado?

3

Eu escrevi este pequeno script Python para fazer backups diários de um diretório contendo alguns arquivos (os backups devem girar 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 eu o executo manualmente, ele funciona como esperado, criando um diretório de backup com o nome do dia da semana atual, mas ele não está sendo executado diariamente: deixei-o dentro de /etc/cron.daily por 3 dias e depois disso sem backup diretório foi criado, o servidor estava em todos os tempos.

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 é o 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?

    
por lvella 15.04.2013 / 23:06

2 respostas

11

Isso está acontecendo porque seu script tem uma extensão .py . Os arquivos em /etc/cron.daily são executados pelas partes de execução (8) comando e seu padrão é ignorar programas que não correspondem a várias regras. Você deve conseguir remover apenas a extensão .py .

run-parts runs all the executable files named within constraints described below, found in directory directory. Other files and directories are silently ignored.

If neither the --lsbsysinit option nor the --regex option is given then the names must consist entirely of ASCII upper- and lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.

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 da!

    
por 15.04.2013 / 23:31
0

A entrada do cron não deve ser semelhante? 0 * * * 1-7 root /etc/cron.daily/file-store-backup.py

Eu não costumo colocar o script real no arquivo cron, geralmente eu me refiro ao script no arquivo.

    
por 15.04.2013 / 23:15