У меня есть скрипт test.sh
#!/bin/sh
php /home/v/file.php
sh /root/x/some.sh
когда я запускаю файл как root из командной строки, он работает.
sh /home/v/test.sh
когда я устанавливаю его в crontab -e (это корневой cron), не работает
* * * * * sh /home/v/test.sh
Что я делаю не так? Благодарность
Ответы:
По словам мужчины:
Таким образом, демон cron не знает, где находится php, и вы должны указать полный путь php вручную, например (я не знаю ваш реальный путь PHP):
Другим способом является создание файла / etc / profile (или вашего .profile / .bashrc), например
Это полезно, если ваш .bashrc устанавливает переменные окружения, которые вам нужны (например, PATH)
РЕДАКТИРОВАТЬ
Интересное чтение - « Новичок: введение в cron », не стоит недооценивать статью из заголовка (это чтение для всех), на самом деле она хорошо написана завершена и идеально отвечает на ваш вопрос:
источник
Существует четыре распространенных причины для команд, работающих при вводе в терминале, но не в cron, в порядке общности:
$PATH
, а другие ожидаемые переменные отсутствуют.Если ваша работа выдает какие-либо выходные данные, включая сообщения об ошибках, cron отправляет вам электронное письмо со всем выводом. Убедитесь, что вы читаете почту, которую получаете локально, или пересылаете ее на адрес, который вы прочитали. Чтобы переслать почту с локальной учетной записи на другой адрес, введите другой адрес
~/.forward
. Если задание хрон работают как пользователь системы (root
,webmaster
, ...), убедитесь , что почта пользователя перенаправляются к вам (и любому другому администратору); с большинством настроек почты ставьте строки какroot: elzo
в/etc/aliases
.источник
Демон cron обычно выполняет вашу команду в оболочке, где переменная окружения PATH ограничена каким-либо системным значением по умолчанию, например / usr / bin: / bin.
Вероятно, ваша
php
команда недоступна в / usr / bin или / bin и, следовательно, скрипт завершается ошибкой при выполнении через cron и выполняется успешно, если нет.Cron обычно сообщает об ошибках или сообщения о задании по почте пользователю root (т. Е. Когда команда возвращает состояние выхода! = 0 или выдает выходные данные в stdout / stderr) после завершения задания.
В зависимости от вашей системы вы должны настроить локальную доставку почты для получения этих сообщений.
источник