내 cronjob이 PHP를 통해 내 서버에서 실행되고 있는지 어떻게 확인할 수 있나요?

내 cronjob이 PHP를 통해 내 서버에서 실행되고 있는지 어떻게 확인할 수 있나요?

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";
}
?>

관련 정보