1

Я использую crontab для выполнения файла PHP следующим образом:

0 4 * * * /opt/lampstack/php/bin/php /opt/lampstack/apache2/htdocs/tests/test.php

Я вполне уверен, что сам файл работает правильно, потому что если я /opt/lampstack/php/bin/php /opt/lampstack/apache2/htdocs/tests/test.php в командной строке, я получу ожидаемые результаты.

В журнале cron я вижу, что он вызывается в указанное время, но файл php не запускается (код php - это всего лишь одна строка, записывающая файл журнала). Я подумал, что, возможно, это как-то связано с разрешениями пользователя, поэтому я попытался заставить его выполняться от имени пользователя root (поместив root между временем и /opt /lamp ...), но все же не повезло.

Любые слова мудрости?

Кейт

3 ответа3

2

Вы можете попытаться указать путь к файлу php.ini с ключом -c, а также использовать ключ -f, чтобы указать файл, который нужно выполнить.

0 4 * * * /opt/lampstack/php/bin/php -c /etc/php.ini -f /opt/lampstack/apache2/htdocs/tests/test.php

Вы также можете включить display_errors и error_reporting

Но я также согласен с другими ответами в том, что это звучит как проблема с разрешениями для самого файла журнала. Если у вас есть глобальный набор параметров error_log, вы можете попытаться отразить что-то с помощью error_log() в вашем коде.

1

Не забывайте, что при запуске из Cron вы не получаете среду входа в систему. Когда вы запускаете из командной строки, вы получаете как минимум один профиль и, возможно, другие профили, которые могут задавать окружение и другие переменные.

Вы также по умолчанию запускаете из-под Cron пользователя root, и вам, вероятно, нужно работать как пользователь www или как-то настроено ваше веб-окружение.

0

Это звучит как проблема с разрешениями.

Какой путь к файлу вы пытаетесь записать?

Каковы разрешения для этого файла и его каталога?

Чтобы помочь вам протестировать, измените ваш скрипт на что-то вроде этого:

<?php

$file = '/tmp/logfile.txt';

echo "I'm writing to $file\n";

if (! $fh = fopen($file, 'a')) {
    fwrite(STDERR, "ERROR: cannot write $file");
    exit(1);
}
fwrite($fh, "Stuff to write\n");
fclose($fh);

Запустите это в cron. Он пишет в STDOUT, чтобы вы получили по электронной почте. Он также пишет в STDERR, если возникла проблема с созданием файла, что вызовет еще больше электронной почты.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .