10-Openwrtprocdデーモン



10 Openwrt Procd Daemon



組み込みシステムには通常デーモンがあり、デーモンプロセスはシステムステータスを監視し、特定の異常終了が発生した場合はシステムプロセスがプロセスを再開します。 procdはそのようなプロセスであり、新しいOpenWrtプロセス管理サービスであるC言語で記述されています。これは、initスクリプトを介してプロセス情報に追加され、開始されたプロセスを管理するためにデータベースをprocdします。これはubusバス呼び出しによって実行され、重複呼び出しを防ぐためにプロセスを開始できます。

procdプロセス管理機能は主に3つの部分で構成されています。



  • reload_configで、変更通知procdプロセスがある場合は、構成ファイルが変更されているかどうかを確認します。
  • procd、daemonは、ユーザーの要求を受け取り、管理プロセスを追加または削除し、プロセスのステータスを監視します。プロセスが終了していることがわかった場合は、プロセスを再開します。
  • procd.sh パッケージングシステムバスprocdメソッドを提供する関数、呼び出し元は提供されたprocdを使用するのに非常に便利です。
root@xxxxx:/etc/init.d# cat /var/run/config.md5 b9f0f9179b5b407ff85430da41877ba3 /var/run/config.check/dhcp ce8e9fffa77a896c43cdeb2b83dede88 /var/run/config.check/dropbear 92a19521dd5c8cacd08e64e2785d94b1 /var/run/config.check/firewall 736bccfcc298fcdac1016da5f58518e1 /var/run/config.check/fstab 751c2e2ff80f2952b4c866fbc1d52f7d /var/run/config.check/guide b9111c52e6db67b7bf550d5701a44e5f /var/run/config.check/htpdate bad4e7384734245500ed9c081e0009f5 /var/run/config.check/igmpproxy 645f0a3cbfd1cf565b920dfd897af0c5 /var/run/config.check/network 3165f4af5f45e3209f9e20e28a78a76a /var/run/config.check/rpcd 87701d34b6de4ec46e6cb5edf1ac5f74 /var/run/config.check/system 6ec4ee52ca677ac87ff2469607a8cf9f /var/run/config.check/uhttpd 0ba26b28318a2a2d879fdad87f8e8c56 /var/run/config.check/upnpd 775e2ac3058da3ea2e973b3747233b92 /var/run/config.check/webpage 009ba5a3f9130b74662822d36d3ecd37 /var/run/config.check/wifidev 741a39d373e3c6f2dbeff47ca145606b /var/run/config.check/wireless af357fab720926629ad9ab2ff4f465e1 /var/run/config.check/zihome e2e3d1e8532386200a708f0c6837830c /var/run/config.check/zqos

起動スクリプトでUSE_PROCDを定義すると、これらの関数が呼び出されます。重いrc.commonで
これらの関数のリロードに対応する、新しく定義された開始関数です。

文字番号 意味
start_service procdにサインアップしてサービスを開始します。これは、内部のサービス管理対象オブジェクトの増加です。
stop_service 登録解除を処理し、サービスをシャットダウンします。管理オブジェクトは、のサービスで削除されます。
service_triggers 構成ファイルまたはネットワークインターフェイスの変更をトリガーして構成サービスを再読み取りした後
service_running サービスステータスのクエリ
reload_service 関数を定義した場合、リロードが関数を呼び出すとき、または開始関数を再度呼び出すときに、サービスを再始動します。
service_started プロセスが正常に開始されたかどうかを判断するために使用されました

例えば:

通常、最初の2行が固定されています
OK表示 '/etc/rc.common'解釈されたスクリプト。
コンテンツの2行目のUSE_PROCD変数が1に設定されていることは、
プロセスprocdを管理するために使用されます



(1)pprocd_open_instanceがサービスインスタンスを増やし始めました。

(2)サービスインスタンスのprocd_set_param設定パラメータ値。通常、パラメータにはいくつかの種類があります。

  • command:サービスを開始するためのコマンドライン。
  • respawn:プロセスが予期せず終了し、メカニズムと戦略を再起動します。3つの設定が必要です。異常故障境界値(しきい値)を決定する最初のセット、デフォルトでは3600秒、終了時間がこれより短い場合は累積回数を再開し、このしきい値を超えると数は0に設定されます再起動します。再起動プロセスの2番目の遅延時間(タイムアウト)は、秒数の後に開始されます。デフォルトは5秒です。 3番目の設定は、失敗した再起動(再試行)の総数です。これは、永続的に終了する前にプロセスを再起動した回数です。この数を超えると、プロセスは終了しません。デフォルトは5回です。また、設定なしで使用される場合、これらの設定がデフォルト値になります。
  • env:プロセス環境。
  • file:設定ファイル名。ファイルの内容を比較するために変更されました。
  • netdev:ネットワーク機器がバインドされています(プローブifindexが変更されました)。
  • 制限:プロセスリソースの制限。
    1つのタイプのパラメーターのみを使用でき、その後にパラメータータイプの値が続きます。

(3)procd_close_instanceは、インスタンスを増やすプロセスを完了します。



/etc/init.d/zdetectに来ました

#!/bin/sh /etc/rc.common USE_PROCD=1 START=88 STOP=92 start_service() { procd_open_instance procd_set_param command /usr/bin/zdetect procd_set_param respawn [ -e /proc/sys/kernel/core_pattern ] && { procd_set_param limits core='unlimited' } procd_close_instance }

vim /etc/init.d/zboard

#!/bin/sh /etc/rc.common USE_PROCD=1 START=18 STOP=82 start_service() { procd_open_instance local wan_port=$(uci -q get zihome.system.wanport) local wan_status=0 [ -z '$wan_port' ] && { wan_port=0 } if [ -f /tmp/status/wan_port_status ] then wan_status=$(cat /tmp/status/wan_port_status) fi procd_set_param command /usr/bin/zboard -p $wan_port -s $wan_status procd_set_param respawn [ -e /proc/sys/kernel/core_pattern ] && { procd_set_param limits core='unlimited' } procd_close_instance }

(4)procd_add_reload_trigger、プロファイルトリガーを増やします。構成ファイルを変更するたびに、reload_configが呼び出されると、現在のインスタンスが再起動されます。構成ファイル名にはオプションのパラメーターがあります。実際、トリガーを増やすために、これら3つの関数をprocd_open_trigger、procd_add_config_trigger、およびprocd_close_triggerを内部的に呼び出しています。

(5)procd_open_validateは、検証配列を開き、一緒にprocd_close_validate関数です。

(6)procd_close_validate、配列を閉じる検証。例8-9は、ファイアウォールのprocdトリガーと検証を使用するようにファイアウォールを構成するためのソフトウェアパッケージです。

(7)procd_open_service(name、[script])、少なくとも1つのパラメーター、最初のパラメーターはインスタンス名、2番目のパラメーターは起動スクリプトのオプションです。この関数は、新しいプロセスprocdサービスメッセージを作成するためのrc.common呼び出しにのみ存在します。

(8)procd_close_service、関数は引数を取りません。これは、管理サービスを増やす完全なプロセスであるrc.commonでのみ呼び出されます。

(9)procd_kill、サービスインスタンス(またはすべてのサービスインスタンス)を強制終了します。少なくとも1つのパラメーターが必要です。最初のパラメーターはサービス名、通常はプロセス名、2番目のパラメーターはオプションのパラメーターです。すべてを指定しないと複数のプロセス例が存在する可能性があるため、2番目のパラメーターはプロセスインスタンスの名前です。インスタンスはシャットダウンされます。この関数rc.common呼び出しは、ユーザーがコマンドラインからstop関数を呼び出したときに、この関数を使用してプロセスを強制終了します。

(10)uci_validate_section、validate_dataコマンドを呼び出して、登録サービスを確認します。構成の変更後、構成ファイル内の構成アイテムの正当性を確認します。認証サービスは、プロセスの開始時にプロセスを処理するためのバスによって登録されたubusです。次のコマンドを入力すると、すべてのシステム検証サービスの登録が表示されます。