Lancei um monte de dardos tentando obter um script python meu para executar a cada minuto. Então pensei em simplificá-lo para 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 do root e executável (não tenho certeza se algum deles importa). E então eu fiz:
sudo service cron reload
E então sente-se e comece a rodar ls -ltr
repetidamente 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 aparece imediatamente.
Obviamente faltando algo estúpido aqui.
Respostas:
Ao adicionar uma configuração cron em
/etc/cron.d/
ou em,/etc/crontab
você deve adicionar o nome de usuário em que contexto 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
repetidamente, basta usarwatch -n 5 "ls -ltr"
e ele executará o comando a cada 5 segundos (ou qualquer outro valor substituindo 5 pelo que você deseja).fonte
man cron
um pouco mais devagar, e prestando atenção especial àsDEBIAN specific
seções, notei que os arquivos NÃO devem ser agrupados ou graváveis. O que eu havia permitido em minha frustração em um ponto.man cron
: Além disso, no Debian, o cron lê os arquivos no diretório /etc/cron.d. O cron trata os arquivos em /etc/cron.d da mesma maneira que o arquivo / etc / crontab (eles seguem o formato especial desse arquivo, ou seja , incluem o campo do usuário ). No entanto, eles são independentes de / etc / crontab: eles não herdam, por exemplo, configurações de variáveis de ambiente. Esta mudança é específica para o Debian, veja a nota em DEBIAN SPECIFIC abaixo.Para criar um novo
cron
trabalho, você deve executarcrontab -e
como o usuário que deseja executar o trabalho. Em seguida, adicione a linha relevante na janela do editor que aparece:A maneira como você faz isso requer um formato diferente e, de qualquer maneira, não é uma boa ideia. Os crontabs
/etc/cron.d
têm um formato um pouco diferente, exigem que um nome de usuário seja executado. Por exemplo:Um bom truque (como sugerido por @VogonPoetLaureate) é capturar o erro padrão de seus trabalhos cron, o que pode ajudar a depurá-los. Por exemplo:
fonte
crontab -l
listar todos os seus trabalhos cron.Um possível erro aqui é como um arquivo de linha única é criado. Da documentação do Ubuntu :
Por exemplo, este caminho da criação não funciona:
fonte