php/var/www/html / *.php не работает в терминале, который открыт из Меню php *.php, работает в терминале, который открыт внутри php содержание папки

Я хочу выполнить Сценарий PHP от крона. Я устанавливаю крон с:

*/1 * * * * php  /var/www/html/cron/cron_job.php

И я вижу его в crontab -u root -l, но задание не выполняется. Это также не работает, когда я выполняю команду непосредственно из командной строки как это:

<?php  /var/www/html/cron/cron_job.php

Я попробовал много ответов, связанных с кроном, но ничто не работало. Например:

/usr/local/bin /var/www/html/cron/cron_job.php
/usr/local/bin/php /var/www/html/cron/cron_job.php
sudo php -f /var/www/html/cron/cron_job.php

Сценарий PHP тестирования (cron_job.php):

php file_put_contents  ('test.txt',"test content\n",FILE_APPEND);  

Полномочиями файла является весь OK, и он работает, когда выполнено в браузере или при открытии терминала в /var/www/html/cron/ и выполнение php cron_job.php.

Согласно просьбе в комментариях, если я добавляю 2> /tmp/php.log кому: php /var/www/html/cron/cron_job.php используйте сценарий с синтаксической ошибкой и попыткой работать (php /var/www/html/cron/cron_job.php 2> /tmp/php.log) от терминала меню затем журнал ошибок получает сообщение об ошибке.

4
задан 25 January 2017 в 05:35

2 ответа

Ваш сценарий почти наверняка выполняет и создает Ваш файл. Это просто не создает его, где Вы ожидаете, что это будет. Вы не используете пути в своем сценарии, Вы просто используете имя файла. Это означает, что файл будет создан в каталоге, в котором работает сценарий.

Вот почему, когда Вы перемещаетесь в определенный каталог и запускаете скрипт там, Вы думаете, что он работает. Поскольку файл создается в каталоге, Вы выполнили его в и таким образом, Вы видите его. По умолчанию, cron выполнения в корневом каталоге пользователя, выполняющего его. Так как это - crontab корня (который, между прочим, плохая идея), файл будет создан в /root. Так, пойдите проверка:

sudo ls /root/test.txt

Так, в следующий раз, дают Вашему сценарию полный путь вместо просто имени файла:

<?php file_put_contents  ('/path/to/test.txt',"test content\n",FILE_APPEND); ?>

Теперь, файл будет создан в /path/to.

11
ответ дан 23 November 2019 в 11:35

Кроном по умолчанию задания выполняются в корневом каталоге пользователя. В то время как в Вашем сценарии не обеспечивается путь, где выходной файл, который будет сохранен, он будет сохранен в каталог, где сценарий выполняется.

В Вашем документе на получение PHP путь к файлу test.txt отсутствует. Можно установить его как абсолютное значение, как это описано в @terdon ответ , или можно обеспечить его как относительный путь (с надлежащим источником). Например, если test.txt shuld быть расположенным в том же каталоге как cron_job.php, содержание Вашего сценария должно стать чем-то как как это:

<?php 
    $path = realpath(dirname(__FILE__)); 
    file_put_contents  ("$path/" . 'test.txt',"test content\n",FILE_APPEND);
?>

, С другой стороны, если Вы не хотите изменять сценарий, Вы могли бы сменить работу Крона таким образом:

*/1 * * * * cd /var/www/html/cron/ && php cron_job.php
6
ответ дан 23 November 2019 в 11:35

Другие вопросы по тегам:

Похожие вопросы: