Справка по Debain cron для доступа к URL

В документации сказано, что мне нужно:

Если ваша учетная запись хостинга находится в системе LINUX/UNIX, вы можете настроить задание CRON, чтобы оно указывало на этот URL http://yourUrlToThisScript.com/cron.php?cron=do&d=31.

Хотя это единственная информация, которую они дают о том, как настроить cron. Я знаю, что скрипт работает правильно, потому что когда я получаю доступ к URL через браузер, я получаю электронные письма.

  1. Я посмотрел несколько примеров и попытался прочитать руководство: Выполнение файлов PHP и придумал: */1 * * * * /usr/bin/php -q /var/www/website/public/domain-manager/cron.php cron=do&d=31 >/dev/nul

Хотя это не работает, и я не получаю никаких писем или ошибок?

  1. Как я могу защитить этот файл cron.php чтобы его нельзя было запустить из браузера? Может быть, что-то вроде этого ответа, хотя для одного файла вместо каталога.

1 ответ

Решение

Есть небольшая разница в том, как вы вызываете скрипт PHP, и особенно в том, как он будет обрабатывать заданные параметры. Документация о запросе HTTP GET, и вы выполняете вызов командной строки сценария PHP.

Пример HTTP-запроса GET, выполняемого из командной строки:

wget -q -O  - "http://localhost/domain-manager/cron.php?cron=do&d=31"

Пример выполнения скрипта PHP через командную строку:

php -f /var/www/website/public/domain-manager/cron.php cron=do d=31

Основное отличие заключается в том, как PHP будет получать параметры. Для HTTP-запроса PHP будет использовать интерфейс к Apache или любому используемому вами веб-серверу и извлекать параметры в массив $_GET. Для вызова командной строки PHP должен использовать массив $argv.

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

Рекомендация для вашего crontab:

*/2 * * * * wget -q -O  - "http://localhost/domain-manager/cron.php?cron=do&d=31" > /dev/null 2>&1

Рекомендация по защите этого файла от внешнего запроса: Содержимое /var/www/website/public/domain-manager/.htaccess (в том же каталоге)

<files cron.php>
order deny,allow
deny from all
allow from localhost
</files>
Другие вопросы по тегам