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が終了したときにのみメッセージを受け取ります。
作業する2台目のコンピュータがある場合は、同様のものを設定できます。電子メールメッセージには、すべてのcrontabファイル(含まれている)の内容を含めることができ、/var/spool/cron/crontabs/
必要なコマンドがまだ含まれていることを確認できます。
答え3
よりクリーンで移植可能なソリューションは、特にこの目的のためにcronで生成されたファイルのタイムスタンプを確認することです。
毎分、Webブラウザで読み取ることができるファイルにアクセスするcronjobを作成します。たとえば、次のようになります。
* * * * * www-data touch /var/www/cron-testfile
PHPを使用してタイムスタンプを確認してください。
<?php
if(time() - filemtime('/var/www/cron-testfile') > 600) {
echo "warning, cron not running";
}
?>