Eu tenho um script test.sh
#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
quando executo o arquivo como root na linha de comando, ele funciona.
sh /home/v/test.sh
quando eu configurá-lo para crontab -e (é o cron cron), não está funcionando
* * * * * sh /home/v/test.sh
O que eu faço de errado? obrigado
Respostas:
De acordo com o homem:
Portanto, o cron daemon não sabe onde está o php e você deve especificar o caminho completo do php manualmente, por exemplo (não sei o seu caminho real do PHP):
Outra maneira é obter o / etc / profile (ou seu .profile / .bashrc), por exemplo
Isso é útil se o seu .bashrc definir as variáveis de ambiente necessárias (por exemplo, PATH)
EDITAR
Uma leitura interessante é " Novato: Introdução ao cron ", não subestime o artigo do título (é uma leitura para todos); na verdade, está bem escrito, completo e responde perfeitamente à sua pergunta:
fonte
Existem quatro causas comuns para os comandos que funcionam quando digitados em um terminal, mas não no cron, em ordem comum:
$PATH
e outras variáveis esperadas ausentes.Se seu trabalho produzir alguma saída, incluindo mensagens de erro, o cron enviará um email com toda a saída. Leia o e-mail que você recebe localmente ou encaminhe-o para um endereço que você lê. Para encaminhar mensagens de uma conta local para outro endereço, insira o outro endereço
~/.forward
. Se o trabalho cron está sendo executado como um usuário do sistema (root
,webmaster
...), certifique-se que o correio do usuário é redirecionado para você (e qualquer outro admin); com a maioria das configurações de email, colocar linhas comoroot: elzo
em/etc/aliases
.fonte
O daemon cron geralmente executa seu comando em um shell em que a variável de ambiente PATH é restrita a algum padrão do sistema, por exemplo, / usr / bin: / bin.
Provavelmente, seu
php
comando não está disponível em / usr / bin ou / bin e, portanto, o script falha quando executado via cron e executa com êxito quando não está.O Cron geralmente relata erros ou mensagens de trabalho por e-mail ao usuário raiz (ou seja, quando um comando retorna um status de saída! = 0 ou produz saída para stdout / stderr) após o término do trabalho.
Dependendo do seu sistema, você precisa configurar a entrega de correio local para receber essas mensagens.
fonte