13

cronプロセスがコマンドラインから(Ctrl + cを介して)またはkillコマンドで強制終了されたときに関数を呼び出すことは可能ですか?

試しregister_shutdown_function()ましたが、スクリプトが強制終了されたときに呼び出されないようですが、スクリプトが正常に終了すると呼び出されます。

結果をファイルに記録し、cronインスタンスが自動的に強制終了されたとき(つまり、実行時間が長すぎるとき)にデータベース値を更新しようとしています。

4

1 に答える 1

15

のマニュアルのコメントにregister_shutdown_function()よると、これは次の方法で実行できます。

CLI を使用している場合 (およびおそらく CLI を使用しないコマンド ライン - 私はテストしていません)、プロセスが SIGINT または SIGTERM を取得すると、シャットダウン関数が呼び出されません。PHP の自然終了のみが shutdown 関数を呼び出します。この問題を解決するには、コマンド ライン インタープリターをコンパイルして、次の --enable-pcntlコードを追加します。

 <?php
 declare(ticks = 1); // enable signal handling
 function sigint()  { 
    exit;  
 }  
 pcntl_signal(SIGINT, 'sigint');  
 pcntl_signal(SIGTERM, 'sigint');  
 ?>

このようにして、プロセスがこれらのシグナルの 1 つを受信すると、プロセスは正常に終了し、シャットダウン関数が呼び出されます。... (スペースを節約するために省略しています。全文をお読みください)

それが面倒な場合は、代わりに時間制限を設定して、PHP 内からタイムアウトを実行することを検討します。制限に達すると致命的なエラーがスローされ、シャットダウン関数が正常に呼び出されるはずです。

于 2010-10-11T20:50:55.647 に答える