Назад | Перейти на главную страницу

Символическая ссылка в crontab, скрипт не найден

Я запускаю тестирование Debian и не могу заставить простой cron запускать скрипт PHP с символической ссылкой.

У меня есть скрипт php в подкаталоге в моей домашней папке /home/foobar/dir/script.php (который начинается со следующего слова shebang #!/usr/bin/env php).

Я создал символическую ссылку, которая указывает на нее:

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*

И добавил в мой crontab следующее правило (выполнить whatever каждую минуту):

crontab -e
* * * * * whatever

Но это не работает, Я получаю следующую ошибку:

cat /var/mail/foobar
...
/bin/sh: 1: whatever: not found

Пока указание на скрипт без использования символической ссылки работает:

crontab -e
* * * * * /home/foobar/dir/script.php

Любая идея?

Каталоги вроде /usr/local/bin и /usr/local/sbin не по умолчанию в cronjobs $PATH. Но вы можете переопределить $PATH в crontab просто поместите что-то вроде этого перед любыми заданными cronjobs

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Переменная среды $ PATH в cron ограничена и не будет включать ни / usr / local / bin, ни / home / foobar / dir. Как вы выяснили, правильный ответ - полностью указать путь к сценарию в вашем crontab; это приводит к меньшему количеству сюрпризов.