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