Справка по Debain cron для доступа к URL
В документации сказано, что мне нужно:
Если ваша учетная запись хостинга находится в системе LINUX/UNIX, вы можете настроить задание CRON, чтобы оно указывало на этот URL http://yourUrlToThisScript.com/cron.php?cron=do&d=31.
Хотя это единственная информация, которую они дают о том, как настроить cron. Я знаю, что скрипт работает правильно, потому что когда я получаю доступ к URL через браузер, я получаю электронные письма.
- Я посмотрел несколько примеров и попытался прочитать руководство: Выполнение файлов PHP и придумал:
*/1 * * * * /usr/bin/php -q /var/www/website/public/domain-manager/cron.php cron=do&d=31 >/dev/nul
Хотя это не работает, и я не получаю никаких писем или ошибок?
- Как я могу защитить этот файл
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>