2009-07-01 2 views
4

Я запускаю cronjob, который вызывает скрипт php. Я получаю «не удалось открыть поток», когда файл вызывается cron. Когда я подключился к каталогу и запустил файл из этого места, все хорошо. В принципе, файл include_once(), который я хочу включить, - это два каталога, где находится скрипт php.include path and cron

Может кто-нибудь, пожалуйста, скажите мне, как я могу заставить это работать от кроны?

+0

Эй, вы, ребята, великолепны, благодаря целой группе! Я настрою среду в скрипте cron. – user109162

ответ

5

Есть несколько способов сделать это: Вы могли бы cd в каталог в хронах сценария:

cd /path/to/your/dir && php file.php 

Или точка к правильный включить файл относительно current script в PHP:

include dirname(__FILE__) . '/../../' . 'includedfile.php'; 
+0

Эй, я думаю, что первый пример будет работать. Я уже пытался использовать ваше последнее предложение перед публикацией здесь и не мог заставить его работать. Как сказал Пакс ниже, cron примерно начинается с минимального env, и я до сих пор не знал этого. Спасибо за это! – user109162

+0

Работал как шарм, спасибо снова soulmerge! – user109162

5

cron известен своей минимальной средой. Либо:

  • У вас установлен сценарий собственной среды;
  • имеют специальный скрипт cron, который настраивает среду, затем вызывает ваш скрипт; или
  • настроить среду внутри самой crontab.

Примером последнего (который является то, что я предпочитаю использовать, если есть не слишком много вещей, которые нужно настройка) является:

0 5 * * * (export PATH = /mydir:$PATH ; myexecutable) 
+0

Привет. Благодарю за ваш ответ. Как вы это понимаете, настроив окружающую среду? Пожалуйста, уточните для меня. Благодарю. – user109162

+0

Зависит от того, почему он не работает под cron. Если это недостающая переменная среды, отправьте свой .profile. Если это каталог, используйте команду «(cd/mydir; ./myexecutable)» в качестве команды. – paxdiablo

+0

Эй, Пакс, спасибо за помощь и руководство. Я не мог заставить ваше решение работать по какой-то причине, экспортируя путь. Мой сервер использует BASH, который, как я полагаю, использует команду export, но по какой-то причине это не сработает. Я использовал решение soulmerge и просто cd'd к доректории, а затем начал сценарий оттуда. Работал как шарм. – user109162

1

вы должны увидеть, что это путь, который хрон бежать от.

echo pathinfo($_SERVER["PATH_TRANSLATED"]); 

в соответствии с этим же включаемым

include $path_parts['dirname']."/myfile.php"; 
+1

Привет Хаим, спасибо за ответ. Я никогда не знал о функции pathinfo. Это поможет мне в будущем. Спасибо! – user109162

+0

Вы не можете использовать $ _SERVER на задании cron. Ничего плохого в том, чтобы получить абсолютный путь и копировать/вставлять в скрипт cron. – AVProgrammer