Используя curl, чтобы cronjob URL
У меня есть приложение на php-Codeigniter, размещенное на MediaTemple, и я хочу, чтобы cron выполнял работу контроллера, служба поддержки сказала мне использовать CURL, который я пытался использовать без каких-либо успехов, например:
curl http://mydomain.com/admin/action/get
Мой контроллер вставляет некоторую информацию в базу данных, скручивание не отображает ошибку, но вставки не происходят только тогда, когда я запускаю контроллер непосредственно в браузере. авторизация не требуется.
любая идея?
Спасибо
4 ответа
Вам нужно предоставить больше информации о том, что происходит, прежде чем люди действительно смогут вам помочь. Пожалуйста, ознакомьтесь с этим полезным руководством, чтобы задавать вопросы.
Некоторые отправные точки:
- Что происходит, когда вы запускаете эту команду из командной строки?
- Что происходит, когда вы переходите на URL контроллера в веб-браузере?
- В чем именно состоит ваш "не успех"? Какие признаки успеха вы ищете и что вы наблюдаете?
- Ваш контроллер требует аутентификации? Если это так, вам нужно будет сказать
curl
как это поставить. Если нет, имейте в виду, что вы разрешаете запускать этот процесс любому пользователю Интернета, что может способствовать атакам типа "отказ в обслуживании" или другим проблемам безопасности.
Или... вы можете просто написать скрипт PHP, предназначенный для запуска на CLI, и назначить задачу cron непосредственно файлу php:
php -f /path/to/my/file.php
Вот некоторая информация об использовании PHP в CLI. Есть способы сделать это с CodeIgniter.
Тем не менее, есть способ узнать наверняка, идет ли запрос куда-нибудь. (помимо сохранения вывода запроса) CodeIgniter оснащен отличными методами ведения журнала. Вы могли бы установить свой $config['log_threshold']
в application/config/config.php что-то вроде 3
, Запустите запрос как в браузере, так и один раз в CLI. Затем посмотрите в папке вашего приложения /logs файл журнала на текущий день. Найдите в файле URL, который вы запрашиваете. Там должно быть два места, где он зарегистрирован. Если в файле журнала меньше запросов, которые вы сделали, то вы знаете, что с CURL что-то не так. В противном случае вы знаете, что-то не так с приложением.
Просто создайте файл cronactivator.php и укажите свой cronjob на этот файл. CURL не требуется.
<?php
//for php4 use fopen
$html_data = file_get_contents('http://www.yoursite.com/framework/controller/action', 'r');
echo "DONE!";
exit;
?>
@seth - я не на linux box, поэтому не могу проверить это, но ваша проблема либо в том, что сам curl не установлен, либо для работы curl нужны определенные переключатели.
Если вы все еще хотите, чтобы это работало, сначала заставьте его работать через SSH сервера (используйте Putty в Windows), или вы можете написать скрипт для его тестирования;
<?php
$code=system('curl --help');
echo '<br><br> Exit Code: '.$code;
?>
Не то, что если он пишет какой-либо другой код ошибки, кроме 0, у вас есть проблемы с CURL.
С другой стороны, вы можете использовать wget
вместо. Это больше поддерживается в Linux, чем CURL (afaik). Хотя я большой поклонник CURL, так уж получилось, что wget
более популярен для такой работы.