LINUX.ORG.RU
ФорумAdmin

Как заставить cron работать с php?

 , ,


0

1

Есть простенький скрипт который выводит в файл надпись из разряда hello word. Если запустить его через вэб по пути http://site.ru/script.php, то всё работает, однако если пытаюсь через крон, то нет. Если просто ввести /var/script.php > /var/script.log 2>&1 то ругается на неизвестные команды в строках php файла. Если ввести как: /usr/bin/php /var/script.php > /var/script.log 2>&1 то в лог файл пишется сам скрипт и всё. Не отрабатывает. Если попробовать через curl: curl http://site.ru/script.php > /var/script.log 2>&1 то в лог просто пишется таблица курла и всё. Тоже не работает скрипт. Если с пользователем root /usr/bin/php /var/script.php то тоже не работает, а почему не знаю т.к. лог не пишется. А если добавляю строку с логом, то пишет что не знает команду root.

Пробовал ещё разные вариации, типа указав конкретную версию php или https, но результаты те же. Время выполнения я всегда указывал вначале (типа 20 14 * * *), но здесь решил не загромождать им текст.



Последнее исправление: zawibis (всего исправлений: 1)
Ответ на: комментарий от goingUp

вот сюда > /var/script.log 2>&1 он же должен был написать об успешном выполнении? Я попробовал новый чтобы создался, он создал его пустым. Или 2>&1 передаёт только ошибки и выполнение скрипта не является чем-то типа кодом 200 мол всё хорошо?

zawibis
() автор топика
Ответ на: комментарий от zawibis

Вроде как <?php это более устаревший синтаксис

Нет, он всегда включен, а <? нужно дополнительно включать в php.ini. Вообще все три ваших способа запуска рабочие, но в каждом какой-то косяк) Первый требует добавления #!/usr/bin/php в начало скрипта и установку executable bit. У второго <? выключено в настройках. При третьем скрипт по идее запускается, но не может записать файл из-за прав доступа)

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

То есть дело не в кроне? Потому что сейчас я попытался запустить в него более объёмный скрипт для синхронизации кадровой системы и телефонного справочника и полезли куча ошибок в лог, хотя вручную при запуске их нет (<?php добавил)

zawibis
() автор топика
Ответ на: комментарий от zawibis

и полезли куча ошибок в лог, хотя вручную при запуске их нет

Значит есть какая-то разница между запуском вручную и из крона. Например запускаются под разными пользователями.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

А вот это, кстати, интересный вопрос. Я ведь не указал в кроме под кем он должен запускаться, но редактировал файл под root’ом, т.е. задание от него запускается? И как мне указать под кем запускать, если я пробовал и он принял имя root как команду?

zawibis
() автор топика
Ответ на: комментарий от zawibis

редактировал файл под root’ом, т.е. задание от него запускается?

Да. crontab -e редактирует файл текущего пользователя. Пользователя можно указать. crontab -u username -e

если я пробовал и он принял имя root как команду?

Это синтаксис для файла /etc/crontab, для crontab -e он не подходит

Вы кстати вручную запускаете из командной строки или через браузер? В этом тоже может быть разница, у вас походу разные настройки php командной строки и в браузере.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

А текущий пользователь - это тот, кто вошёл в систему или кто запустил консоль? Вот я вошёл как доменный, но через sudo su работаю как root.

Вручную через браузер запускаю

zawibis
() автор топика
Ответ на: комментарий от zawibis

su меняет пользователя

Вручную через браузер запускаю

Может быть вариант с curl будет работать тогда

почему у root’a не может быть прав на редактирование других файлов

должны быть. Наверное ошибки из-за чего-то другого.

goingUp ★★★★★
()
Ответ на: комментарий от goingUp

Да, владельцем файла является другой пользователь. Я попробовал в его кроне (var/spool/cron) то же задание запустить и получил ту же ошибку. Что-то там про то, что не может найти файл или директорию.

В целом это уже проблема самого скрипта, а не крона… нужно ломать голову надо другой проблемой

zawibis
() автор топика
Ответ на: комментарий от zawibis

тогда попробуйте засунуть свой код в test.sh файл:

#!/usr/bin/env php
<?php
// ваш php код

Сделайте его исполняемым и добавьте в крон как обычный bash скрипт. И не забудьте что в кроне последняя строка должна быть пустой (хотя приличный крон и сам не позволит применить изменения без нее).

Obezyan
()
Ответ на: комментарий от Obezyan

ключа f

Это старый ключ для запуска скрипта бинарником php для cgi. Сейчас уже везде отдельные cli бинарники, которым он не нужен, но его оставили для обратной совместимости.

goingUp ★★★★★
()