Por que meu job cron.d por minuto não é executado?

32

Eu joguei um monte de dardos tentando pegar um script python meu para executar a cada minuto. Então eu pensei em simplificá-lo para apenas fazer a "coisa mais simples que poderia funcionar" uma vez por minuto (estou executando o debian / testing).

Eu criei um arquivo de linha única em /etc/cron.d/perminute :

* * * * * /bin/touch /home/me/ding_dong

É de propriedade root e executável (não tenho certeza se algum deles importa). E então eu fiz:

sudo service cron reload

E, em seguida, sente-se e comece a executar ls -ltr de novo e de novo no meu diretório pessoal ( /home/me ). Mas meu arquivo ding_dong nunca aparece. Eu sei que se eu fizer um sudo /bin/touch /home/me/ding_dong , ele aparecerá imediatamente.

Obviamente, faltando algo estúpido aqui.

    
por Travis Griggs 23.10.2013 / 22:33

3 respostas

43

Ao adicionar uma configuração cron em /etc/cron.d/ ou em /etc/crontab você precisa adicionar o nome de usuário no contexto em que o comando deve ser executado, no seu exemplo

* * * * * root /bin/touch /home/me/ding_dong

E apenas uma dica minha: você não precisa começar a executar ls -ltr de novo e de novo, use watch -n 5 "ls -ltr" e ele executará o comando a cada 5 segundos (ou qualquer outro valor substituindo 5 pelo que você quer).

    
por 23.10.2013 / 23:02
3

Para criar um novo trabalho cron , você deve executar crontab -e como o usuário que deseja executar o trabalho. Em seguida, adicione a linha relevante na janela do editor que aparece:

* * * * * /bin/touch /home/me/ding_dong

A maneira como você está fazendo isso requer um formato diferente e não é uma boa ideia de qualquer maneira. Crontabs em /etc/cron.d tem um formato ligeiramente diferente, eles exigem um nome de usuário para ser executado sob. Por exemplo:

* * * * * USERNAME /bin/touch /home/me/ding_dong

Um bom truque (como sugerido por @VogonPoetLaureate) é capturar o erro padrão de suas tarefas agendadas que podem ajudar a depurá-las. Por exemplo:

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error
    
por 23.10.2013 / 22:59
2

Um possível erro aqui é como um único arquivo de linha é criado. De Documentação do Ubuntu :

...line has five time-and-date fields, followed by a command, followed by a newline character.

Por exemplo, esse modo de criação não funciona:

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong
    
por 20.12.2016 / 00:22

Tags