ホームページ >バックエンド開発 >PHPチュートリアル >PHPにおけるスクリプトデーモンの実装原理に関するメソッド分析
この記事では、PHP スクリプト デーモンの原理と実装方法を主に紹介し、PHP スクリプト デーモンの実装アイデア、原理、形式、および具体的な実装方法を詳しく分析します。 PHP の例とスクリプトデーモンの原理と実装方法。参考のために皆さんと共有してください。詳細は次のとおりです。
アイデア: 1. while ループ、現在操作するデータがない場合は、crontab スクリプトを実行します。一定時間ごとに実行される場合は、すでに実行されているかどうかを確認してください。実行されていない場合はスキップします。
3. nohup バックグラウンドでの実行4. flock -xn ロック
<?php
set_time_limit(0);
//死循环
while(1) {
$message = '1111111' . "\n";
error_log($message);
sleep(5);
}
#/tmp/lock/test1.lock 为当前进程要锁定的文件,不同的进程配置不同的锁文件,该文件会自动创建 * * * * * flock -xn /tmp/lock/test1.lock -c 'nohup php index.php >> /php/test.log 2>&1 &' * * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log'デーモン プロセスのメモリ オーバーフローを防ぐために、メモリ使用量を定期的に確認することをお勧めします。
次のコードをビジネス スクリプトに入力します:
if(memory_get_usage()>100*1024*1024){ exit('内存溢出');//大于100M内存退出程序,防止内存泄漏被系统杀死导致任务终端 }
注:
Close: :
//方法一: ps -e | grep commend kill -9 pid //方法二: fg %n //n为jobs命令查看的进程号
原則:
Linux flockファイルロックを使用してタスクロックを実装し、競合を解決します
形式:
//查看后台进程 jobs
オプション
-s, --shared: 共有ロックを取得します- x、--exclusive: 排他的ロックを取得します。
-u、--unlock: ロックを削除します。通常は不要です。ロックはスクリプトの実行後に自動的に破棄されます。-n、--nonblock: ロックが解除された場合。すぐに取得されない場合、待機せずに直接失敗します -w、--timeout: ロックがすぐに取得されない場合は、指定された時間待機します -o、--close: コマンドを実行する前にファイル記述子を閉じます。コマンドが子プロセスを生成する場合にロックフリー制御を防ぐために使用されます
-c, --command: シェルで単一のコマンドを実行します-h, --help ヘルプを表示します
-V, --version: バージョンを表示します
php ファイルを実行します。ファイルロックは排他ロックを使用します。ロックされている場合、待機せずに失敗します。パラメータは -xn
* * * * * flock -xn /tmp/mytest.lock -c 'php /home/fdipzone/php/test.php >> /home/fdipzone/php/test.log '
このように、タスクが完了せず、次のタスクが/tmp/mytest.lockがロックされていると判断した場合、現在のタスクは終了し、次のサイクルで再度判断が行われます。
以上がPHPにおけるスクリプトデーモンの実装原理に関するメソッド分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。