Estou executando testes do Debian e não consigo fazer com que um cron simples execute um script PHP com link simbólico.
Eu tenho um script php em um subdiretório na minha pasta pessoal /home/foobar/dir/script.php
(que começa com o seguinte shebang #!/usr/bin/env php
).
Eu criei um link simbólico que aponta para ele:
sudo ln -s ~/dir/script.php /usr/local/bin/whatever
ls -la /usr/local/bin
lrwxrwxrwx 1 root staff 24 Feb 27 17:46 whatever -> /home/foobar/dir/script.php*
E adicionei a seguinte regra ao meu crontab (executar whatever
a cada minuto):
crontab -e
* * * * * whatever
Masnão funciona, Estou tendo o erro a seguir:
cat /var/mail/foobar
...
/bin/sh: 1: whatever: not found
Enquantoapontar para o script sem usar o link simbólico funciona:
crontab -e
* * * * * /home/foobar/dir/script.php
Qualquer ideia?
Responder1
Diretórios como /usr/local/bin
e /usr/local/sbin
não são por padrão em cronjobs $PATH
. Mas você pode redefinir $PATH
no crontab, basta colocar algo assim antes de qualquer cronjob definido
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Responder2
A variável de ambiente $PATH no cron é limitada e não incluirá nem /usr/local/bin nem /home/foobar/dir. A resposta correta é, como você descobriu, qualificar totalmente o caminho para o script no seu crontab; isso leva a menos surpresas.