cron이 실행되고 있지 않거나 내 서버의 crontab에 특정 cronjob이 설정되지 않은 경우 경고를 표시하고 싶습니다.
php로 확인할 수 있나요?
답변1
출력을 구문 분석하여 crontab -l
특정 crontab 항목이 존재하는지 확인할 수 있습니다. 실행 중인지 여부에 대해서는 cron
명령 출력을 구문 분석하여 실행 중인지 ps -eaf
확인할 수 있습니다.crond
$ ps -eaf|grep [c]rond
root 1705 1 0 May27 ? 00:00:03 crond
출력은 crontab -l
다음과 같습니다:
$ crontab -l
0 12 * * * ls
참고: 다음을 사용할 수 있습니다.system()
기능PHP에서 명령줄 도구를 호출하거나exec()
.
편집 #1
귀하의 의견에 따라 PHP에서 다음을 수행할 수 있습니다. 내 스크립트 cronstatus.php
:
#!/usr/bin/php
<?php
exec("PATH=/usr/sbin:/usr/bin:/sbin:/bin; service crond status", $out, $ret);
print $ret . "\n";
?>
예시 실행
$ sudo service crond stop
Stopping crond: [ OK ]
$ ./cronstatus.php
3
$ sudo service crond start
Starting crond: [ OK ]
$ ./cronstatus.php
0
이 함수는 exec
명령의 출력을 변수로 반환할 수 $out
있을 뿐만 아니라 에서 실행한 명령에 의해 반환된 상태 결과도 반환 할 수 있습니다 $ret
.
답변2
PHP가 읽을 수 있지만 /etc/crontab
일반적으로 읽을 수 없는 내용이 있는 경우 /var/spool/cron/crontabs/
주석 처리된 항목을 대부분 건너뛰고 행을 구문 분석해야 합니다. (이것은 "특정 cronjob이 crontab에 설정되어 있지 않습니다"라는 의미입니까?) .
프로세스 테이블에 "cron" 항목이 있는지 확인하는 것이 가능해야 하지만 실제로 어떤 작업을 수행하고 있는지 알아내는 것이 더 어려울 수 있습니다.
내가 물려받은 오래되고 다소 불안정한 기계에서는 cron
때때로 기계가 정지되는 경우가 있었습니다. 나는 15분마다 실행되는 작업을 설정하여 (이메일을 통해) 더 안정적인 다른 컴퓨터에 알립니다. 다른 머신은 cronjob을 실행하고 이메일이 15분 전에 도착했는지 확인합니다. 그렇지 않은 경우 작업에서 호출기로 알림을 보냅니다. 따라서 매 15분마다가 아니라 cron이 종료될 때만 메시지를 받습니다.
작업할 두 번째 컴퓨터가 있는 경우 비슷한 것을 설정할 수 있습니다. 이메일 메시지에는 모든 crontab 파일(포함)의 내용이 포함될 수 /var/spool/cron/crontabs/
있으며 필요한 명령이 여전히 포함되어 있는지 확인할 수 있습니다.
답변3
더욱 깨끗하고 이식 가능한 솔루션은 특별히 이 목적을 위해 cron으로 생성한 파일의 타임스탬프를 확인하는 것입니다.
매분마다 웹 브라우저에서 읽을 수 있는 파일에 액세스하는 cronjob을 만듭니다. 예를 들면 다음과 같습니다.
* * * * * www-data touch /var/www/cron-testfile
PHP를 사용하여 타임스탬프를 확인합니다.
<?php
if(time() - filemtime('/var/www/cron-testfile') > 600) {
echo "warning, cron not running";
}
?>