ホームページ バックエンド開発 PHPチュートリアル PHP デーモン プロセスを 1 秒に 1 回実行する Linux コマンド nohup を追加します_PHP チュートリアル

PHP デーモン プロセスを 1 秒に 1 回実行する Linux コマンド nohup を追加します_PHP チュートリアル

Jul 21, 2016 pm 03:26 PM
linux nohup php unix タスク 関数 追加 注文 成し遂げる 埋め込む プロセス

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



コードをコピーします

コードは次のとおりです:
#!/usr/bin/env php -q $status = has_goaway (); if ($ status) { //done
}
?> 秒、スクリプトが実行されます。
短期間のうちにスクリプトのメモリ リソースが解放されず、新しいスクリプトが有効になっていることがわかりました。言い換えれば、新しいスクリプトは開始されますが、古いスクリプトによって占有されていたリソースは期待どおりに解放されていません。このようにして、時間の経過とともに多くのメモリ リソースが無駄になります。このスクリプトにいくつかの改良を加えました。改良点は次のとおりです:
@file: /php_scripts/scan_userstatus.php



コードをコピーします
コードは次のとおりです:


#/usr/bin/ env php -q
while ( 1) {
$status = has_goaway();
if ($status) {
//done } usleep(10000000) ?> crontab はもう必要ありません。次のコマンドでスクリプトを実行すると、同じ機能効果を実現できます#chmod +x /php_scripts/scan_userstatus.php
#nohup /php_scripts/scan_userstatus.php &
ここでは、& を使用してスクリプトをバックグラウンドで実行します。ターミナルセッションウィンドウが閉じられ、プロセスが強制終了されるのを防ぐために、 nohup コマンドを使用します。それでは、Unin/Linux デーモンと同じように、nohup コマンドを使用せずに実行する方法はあるのでしょうか?次に、デーモン関数について説明します。
デーモンとは何ですか? デーモンは通常、端末を制御しないバックグラウンド タスクとして考えられています。これには 3 つの特徴があります。バックグラウンドで実行されること、起動したプロセスから分離されること、端末を制御する必要がないことです。一般的に使用される実装方法は、fork() -> setsid() -> fork() です:
@file: /php_scripts/scan_userstatus.php



コードは次のとおりです。次のように:

#/usr /bin/env php -q
daemonize();
while (1) {
$status = has_goaway();
if ($status) {
//done
}
usleep (10000000);
} デーモン化 () {
$pid = pcntl_fork();
if ($pid === -1 ) {
return FALSE; if ($pid) { usleep(500) ; exit(); // 親を終了します chdir("/");
$sid = posix_setsid() {
return FALSE; pid = pcntl_fork();
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 は通常、指定されたファイルにリダイレクトされます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/323870.html技術記事 Unix の nohup コマンドの機能は、ファイルが書き込み可能でない場合、プログラムのすべての出力を現在のディレクトリの nohup.out ファイルに保存することです。ユーザーのホームページに掲載されています...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP:サーバー側のスクリプト言語の紹介 PHP:サーバー側のスクリプト言語の紹介 Apr 16, 2025 am 12:18 AM

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

VSCODEに必要なコンピューター構成 VSCODEに必要なコンピューター構成 Apr 15, 2025 pm 09:48 PM

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

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

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

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

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

PHP対Python:ユースケースとアプリケーション PHP対Python:ユースケースとアプリケーション Apr 17, 2025 am 12:23 AM

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

なぜPHPを使用するのですか?利点と利点が説明されました なぜPHPを使用するのですか?利点と利点が説明されました Apr 16, 2025 am 12:16 AM

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

PHPの影響:Web開発など PHPの影響:Web開発など Apr 18, 2025 am 12:10 AM

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

PHPとWeb:その長期的な影響を調査します PHPとWeb:その長期的な影響を調査します Apr 16, 2025 am 12:17 AM

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

See all articles