PHP デーモン プロセスを 1 秒に 1 回実行する Linux コマンド nohup を追加します_PHP チュートリアル
Unix の nohup コマンドの機能は、ファイルが書き込み可能でない場合、プログラムのすべての出力を現在のディレクトリの nohup.out ファイルに保存することです。ファイル内の <ユーザー ホーム ディレクトリ>/nohup.out に配置されます。したがって、このコマンドを使用すると、PHP をシェル スクリプトとして記述し、ターミナル ウィンドウが閉じているかどうかに関係なく、ループを使用してスクリプトを実行し続けることができます。
30秒ごとに時間を記録してファイルに書き込む機能を備えたPHPアプレットの作成をすぐに開始します
# vi for_ever.php
#! /local/php/ bin/php
define('ROOT', dirname(__FILE__).'/');
set_time_limit(0);
while (true) {
file_put_contents(ROOT.'for_ever.txt', date( 'Y-m-d H:i :s')."n", FILE_APPEND);
echo date('Y-m-d H:i:s'), 'OK!';
保存して終了し、for_ever.php ファイルに実行権限を与えます:
# chmod +x for_ever.php
バックグラウンドで実行させます:
# nohup /home/andy/for_ever.php.php &
[1] 5157
nohup: 'nohup.out' に出力を追加します
すべてのコマンド実行出力情報が表示されます。 nohup.out ファイルに配置します。
この時点で for_ever.php for_ever.txt と nohup.out を同じディレクトリで開いて、効果を確認できます。
さて、永遠に続くよ、どうやって終わらせる?
# ps
PID TTY TIME CMD
4247 pts/1 00:00:00 bash
5157 pts/1 00:00:00 for_ever.php
5265 pts/1 00:00:00 ps
# kill -9 5157
プロセス番号 5157 を見つけて強制終了すると、
[1]+ Killed nohup /home/andy/for_ever.php が表示されます
OK!
===================
多くのプロジェクトでは、crontab を通じて定期的に実行する必要がある同様のバックエンド スクリプトが多数存在する場合があります。たとえば、10 秒ごとにユーザーのステータスを確認します。スクリプトは次のとおりです:
@file: /php_scripts/scan_userstatus.php
コードをコピーします
コードは次のとおりです:
短期間のうちにスクリプトのメモリ リソースが解放されず、新しいスクリプトが有効になっていることがわかりました。言い換えれば、新しいスクリプトは開始されますが、古いスクリプトによって占有されていたリソースは期待どおりに解放されていません。このようにして、時間の経過とともに多くのメモリ リソースが無駄になります。このスクリプトにいくつかの改良を加えました。改良点は次のとおりです:
@file: /php_scripts/scan_userstatus.php
コードをコピーします
#/usr/bin/ env php -q
while ( 1) {
$status = has_goaway();
if ($status) {
デーモンとは何ですか? デーモンは通常、端末を制御しないバックグラウンド タスクとして考えられています。これには 3 つの特徴があります。バックグラウンドで実行されること、起動したプロセスから分離されること、端末を制御する必要がないことです。一般的に使用される実装方法は、fork() -> setsid() -> fork() です:
@file: /php_scripts/scan_userstatus.php
コードは次のとおりです。次のように:
#/usr /bin/env php -q
daemonize();
while (1) {
if ($status) {
//done
}
usleep (10000000);
} デーモン化 () {
$pid = pcntl_fork();
if ($pid === -1 ) {
if ($pid === -1) {
return FALSE; else if ($pid) {
exit(0);
if (定義済み) 'STDIN')) {
fclose(STDIN);
}
if (定義('STDOUT')){
fclose(STDOUT);
}
if (定義('STDERR')) {
fclose(STDERR);
}
}
?>
デーモン プロセス関数を実装した後、常駐プロセスを作成できるため、実行する必要があるのは 1 回だけです:
#/php_scripts/scan_userstatus.php
ここでの 2 つのより重要な PHP 関数は、pcntl_fork() と posix_setsid() です。プロセスをフォーク () することは、実行中のプロセスのコピーを作成することを意味し、そのコピーは子プロセスとみなされ、元のプロセスは親プロセスとみなされます。 fork() の実行後、fork() を開始したプロセスおよび端末コントロールから分離できます。これは、親プロセスが自由に終了できることも意味します。 pcntl_fork()の戻り値は、-1は実行失敗、0は子プロセスにあること、戻りのプロセスID番号は親プロセスにあることを示します。ここで、親プロセスを終了します。 etsid() を実行すると、まず新しいプロセスが新しいセッションの「リーダー」になり、最後にプロセスが端末を制御しなくなります。これは、デーモン プロセスになるための最も重要なステップでもあります。つまり、デーモン プロセスではなくなります。ターミナルが閉じられると強制的にプロセスが終了します。これは、中断できない常駐プロセスにとって重要なステップです。最後の fork() を実行します。このステップは必須ではありませんが、通常は制御端末が取得されないようにするために実行されます。 (O_NOCTTY フラグを使用せずに端末デバイスを直接開くと、制御端末が取得されます。)
その他の注意点:
1) chdir() は、デーモン プロセスを常に存在するディレクトリに配置します。常駐プロセスによってファイル システムのアンマウントが制限されることはありません。
2)umask() はファイル モードを設定し、最大許容制限までのマスクを作成します。デーモンが読み取りおよび書き込み権限を持つファイルを作成する必要がある場合、より厳格な権限を持つ継承されたマスクは逆の効果をもたらします。
3) fclose(STDIN)、fclose(STDOUT)、fclose(STDERR) は標準 I/O ストリームを閉じます。出力 (エコー) がある場合、デーモンは失敗することに注意してください。したがって、STDIN、STDOUT、および STDERR は通常、指定されたファイルにリダイレクトされます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPは、動的なWeb開発およびサーバー側のアプリケーションに使用されるサーバー側のスクリプト言語です。 1.PHPは、編集を必要とせず、迅速な発展に適した解釈言語です。 2。PHPコードはHTMLに組み込まれているため、Webページの開発が簡単になりました。 3。PHPプロセスサーバー側のロジック、HTML出力を生成し、ユーザーの相互作用とデータ処理をサポートします。 4。PHPは、データベースと対話し、プロセスフォームの送信、サーバー側のタスクを実行できます。

VSコードシステムの要件:オペレーティングシステム:オペレーティングシステム:Windows 10以降、MACOS 10.12以上、Linux Distributionプロセッサ:最小1.6 GHz、推奨2.0 GHz以上のメモリ:最小512 MB、推奨4 GB以上のストレージスペース:最低250 MB以上:その他の要件を推奨:安定ネットワーク接続、XORG/WAYLAND(Linux)

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

PHPの中心的な利点には、学習の容易さ、強力なWeb開発サポート、豊富なライブラリとフレームワーク、高性能とスケーラビリティ、クロスプラットフォームの互換性、費用対効果が含まれます。 1)初心者に適した学習と使用が簡単。 2)Webサーバーとの適切な統合および複数のデータベースをサポートします。 3)Laravelなどの強力なフレームワークを持っています。 4)最適化を通じて高性能を達成できます。 5)複数のオペレーティングシステムをサポートします。 6)開発コストを削減するためのオープンソース。

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

PHPは過去数十年にわたってネットワークを形成しており、Web開発において重要な役割を果たし続けます。 1)PHPは1994年に発信され、MySQLとのシームレスな統合により、開発者にとって最初の選択肢となっています。 2)コア関数には、動的なコンテンツの生成とデータベースとの統合が含まれ、ウェブサイトをリアルタイムで更新し、パーソナライズされた方法で表示できるようにします。 3)PHPの幅広いアプリケーションとエコシステムは、長期的な影響を促進していますが、バージョンの更新とセキュリティの課題にも直面しています。 4)PHP7のリリースなど、近年のパフォーマンスの改善により、現代の言語と競合できるようになりました。 5)将来的には、PHPはコンテナ化やマイクロサービスなどの新しい課題に対処する必要がありますが、その柔軟性とアクティブなコミュニティにより適応性があります。
