Script Cron não executando no Mavericks


12

Eu configurei um arquivo crontab do usuário da seguinte maneira:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh

Mas não será executado. Eu esperei por 10 a 15 minutos. Por quê?

O comando auto-update.sh é executado facilmente se executado manualmente. Como posso separar a cadeia de execução e executar meu script no cron?


1
Qual sistema operacional você está executando? O Cron foi descontinuado no OS X, portanto, pode ser necessário iniciar o daemon?
bmike

Mais recente, 10.9.2. Como eu faço isso? Eu só quero que um script funcione a cada hora, por exemplo. No script acima, eu estava desesperado porque não funcionava e o modifiquei para funcionar a cada 2 minutos.
RomaValcer

1
O daemon cron deve ser iniciado automaticamente (por sua substituição, launchd) se existir um arquivo crontab. Consulte /System/Library/LaunchDaemons/com.vix.cron.plist (especialmente os itens KeepAlivee QueueDirectories).
Gordon Davisson

OK, o Keeplive está lá, mas apenas o caminho listado existe '/ etc / crontab' que não existe. Nos Diretórios Queue, existe um arquivo existente na pasta restrita '/ usr / lib / cron / tabs'. Ao abri-lo com su e vim, existe a minha tarefa.
precisa saber é o seguinte

Respostas:


17

O ambiente em que um trabalho cron é executado é um pouco diferente de um shell interativo; é provável que o script esteja sendo executado, mas não com êxito. Uma das maiores diferenças é que, para tarefas agendadas, o PATH padrão é apenas "/ usr / bin: / bin"; portanto, se você usar algum comando que não esteja em / usr / bin ou / bin, eles não serão encontrado, a menos que seu script defina seu próprio PATH ou forneça caminhos explícitos aos comandos. A outra grande diferença é simplesmente que ela não está conectada a uma sessão interativa; portanto, se tentar fazer algo interativo (lido no terminal, etc.) que irá falhar. Tente alterar a entrada cron para:

*/2 * * * * /Users/[my user]/Dropbox/htdocs/auto-update.sh >>/tmp/auto-update.log 2>&1

... e veja se algo informativo aparece no log.


Isso é melhor do que meu esforço - sinta-se à vontade para incorporar minha ideia de logger, se isso melhorar sua resposta.
bmike

O log simplesmente não apareceu.
RomaValcer

@RomaValcer: isso é estranho - significa que nem está chegando ao ponto de iniciar o script. Eu correria ps -ax | grep [c]rone veria se ele lista o daemon cron (/ usr / sbin / cron) em execução. Se for, tente o teste do logger da bmike. De qualquer forma, verifique os logs (/var/log/system.log e o item "Todas as mensagens" no utilitário Console) e veja se há algo de relevante.
Gordon Davisson

Sim, está lá. Mas os logs não mostram nada que comece no horário agendado.
RomaValcer 10/01

4

É difícil dizer, mas e se você incluísse um segundo trabalho cron para executar a cada 5 minutos mais ou menos e chamasse alguma ferramenta criada pelo sistema que registre mensagens no system.log?

0,5,10,15,20 * * * * /usr/bin/logger "cron is working"

Dessa forma, você saberá que o cron está sendo executado para o usuário em questão e pode se concentrar em iniciar o cron ou corrigir seu script para que ele seja executado no ambiente cron limitado. (Você pode olhar para o relógio de parede e selecionar algumas vezes em breve ou até os próximos minutos - por exemplo, editar às 12:34, inserir 35,36,37,38 nos minutos para executar e salvar o arquivo cron .)


4

Já faz um tempo que você fez essa pergunta, mas parece que nenhuma solução surgiu nesta discussão.

Dependendo da maneira como você cria um user-crontab, pode ser necessário executá-lo após editá-lo:

crontab ~/.yourcrontabfile

Para ver se o novo crontab (também após modificá-lo) foi ativado, verifique com:

crontab -l

Isso não funciona. O Crontab -l mostra que os crons estão configurados, mas ainda não funciona.
PKHunter 31/03/19

1

Eu tive o mesmo problema. Você precisa adicionar o caminho ao seu script bash:

#!/bin/sh
PATH=/usr/local/bin:/usr/local/sbin:~/bin:/usr/bin:/bin:/usr/sbin:/sbin

0

Eu tive o mesmo problema. Ele desapareceu depois que adicionei uma nova linha após o meu trabalho no meu arquivo crontab (sou um crontab n00b total, portanto não faço ideia se esse comportamento é amplamente conhecido ou não).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.