Как определить что PHP скрипт запущен по CRON или вручную
Несколько способов узнать, что php-скрипт запущен/выполняется по crontab job.
1. Самый надежный способ, это внутри crontab файла явно определить переменную:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/var/www/your-project/bin
SOME_PROJECT_WORK_DIR="/var/www/your-project"
IS_CRON=true
* * * * * cd "$OME_PROJECT_WORK_DIR" && php artisan schedule:run >> /dev/null 2>&1
0 */2 * * * cd "$OME_PROJECT_WORK_DIR" && flock -w 0 ./cron-some-job.lock ./cron-some-job.sh >> ./cron-some-job.log 2>&1
И проверять внутри скрипта:
$isCli = (php_sapi_name() === 'cli');
$isCron = ($isCli && isset($_SERVER['IS_CRON']));
if ($isCron) {
echo "Скрипт запущен по CRON'у\n";
}
2. Неявный способ. При запуске скриптов по CRON, обычно внутри скрипта доступно очень мало переменных окружения $_ENV. Часто, имеется только 1 переменная:
[SHELL_VERBOSITY] => 0
Если нужен универсальный способ и нет возможности редактировать crontab - можно проверять количество $_ENV переменных:
$isCli = (php_sapi_name() === 'cli');
$isCron = ($isCli && count(array_keys($_ENV)) < 5);
if ($isCron) {
echo "Скрипт запущен по CRON'у\n";
}
Метод для копи/паста:
protected function isCron()
{
return (php_sapi_name() === 'cli' && isset($_SERVER['IS_CRON']));
}
Если знаете другой способ, как определить что скрипт запущен по cron'у - предлагайте.
#php, #cron, #crontab, #cli