Выполнить PHP через cron - не указан входной файл - PullRequest
4 голосов
/ 04 декабря 2009

Я использую следующую команду для выполнения файла PHP через cron

php -q /home/seilings/public_html/dvd/cron/mailer.php

Проблема в том, что у меня есть файл, включенный в исполнение, который определяет, какой конфиг загрузить .... такой как:

if (!strstr(getenv('HTTP_HOST'), ".com")) {
    $config["mode"] = "local";
} else {
    $config["mode"] = "live";
}

cron загружает конфигурацию LOCAL, когда она должна загружать конфигурацию LIVE. Я попытался использовать http: // URL к файлу вместо абсолютного пути, но он не нашел файл. Нужно ли изменить команду, чтобы использовать в ней URL-адрес?

Ответы [ 6 ]

7 голосов
/ 04 декабря 2009

Еще одно простое решение:

хроны:

php -q /home/seilings/public_html/dvd/cron/mailer.php local

PHP:

if (!empty($argv[0])) {
    $config["mode"] = "local";
} else {
    $config["mode"] = "live";
}
5 голосов
/ 04 декабря 2009

Используйте это php_sapi_name(), чтобы проверить, был ли скрипт вызван из командной строки:

if (php_sapi_name() === 'cli' OR !strstr(getenv('HTTP_HOST'), ".com")) {
    $config["mode"] = "local";
} else {
    $config["mode"] = "live";
}

Если вы хотите использовать «live» в командной строке, используйте этот код:

if (php_sapi_name() === 'cli' OR strstr(getenv('HTTP_HOST'), ".com")) {
    $config["mode"] = "live";
} else {
    $config["mode"] = "local";
}
0 голосов
/ 04 декабря 2009

Если вы чувствуете себя ленивым и не хотите убедиться, что все эти переменные env работают, вы можете попробовать запустить cron с помощью:

lynx -dump http://url.to.your.script > /dev/null

0 голосов
/ 04 декабря 2009

Переменная окружения, такая как HTTP_HOST, существует только тогда, когда вы запускаете php-скринты на веб-сервере. Но вы можете добавить его вручную в вашей конфигурации crontab:

## somewhere in crontab config
HTTP_HOST=somthing.com
15 * * * * /path/to/your/script > /dev/null 2>&1

Это позволит вашему сценарию думать, что он работает в рабочей среде.

0 голосов
/ 04 декабря 2009

Вы, вероятно, получаете другой набор переменных окружения при выполнении команды через cron, в отличие от командной строки. Возможно, вам придется написать скрипт-обертку, который настроит среду так, как вы хотите, прежде чем запускать команду PHP.

0 голосов
/ 04 декабря 2009

Когда вы запускаете php с помощью cron, очень вероятно, что тогда переменная окружения 'HTTP_HOST' не будет установлена ​​(или равна нулю), и когда null передается функции strstr, strstr возвращает false, что Именно поэтому режим установлен на "local".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...