追加読書

追加読書

生成されたプロセスを再起動または終了する組み込みコマンドを持たないバイナリがあります。組み込みのCentOSサービスの一部を見た後、利便性SIGHUPなどを尊重するサービスが多いため、テンプレートとして使用できないという結論に達しました。これは、実行して制御するために.shスクリプトを生成する必要があることを意味します。これが私が経験している問題の一部です。単位テンプレートには次のモジュールがあります。PIDファイルしかし、ドキュメントに情報が見つかりませんPIDsystemdが起動するプロセスを管理および追跡する場合、これはPID fileサービスが独自に作成されることを示す方法にすぎません。最初のケースでは、バイナリ自体ではなく/ bin / shを介して実行されるスクリプトの場合、どのように正しく追跡しますか?sh processPIDをキャプチャしませんか?

HTTPD(Apache)サービスユニットを確認してください。

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}

${MAINPID}がどこに宣言されていない場合は、ここでどのように参照できますか?

現在の私の前提は、起動/停止/終了再起動操作を処理するために.shスクリプトに引数を渡す必要があることです。これは一般的に許容される慣行ですか?制限されたユーザー(まったく触れられないページ)で実行している場合、SElinuxではどのように機能しますか? shスクリプトも指定された制限付きユーザーとして実行されますか?

ベストアンサー1

現在の私の前提は、起動/停止/終了再起動操作を処理するために.shスクリプトに引数を渡す必要があることです。

これは一般的な慣行です。これは一般的なものです悪い慣行。それは貧しい人のデーモンであり、(いつものように)シェルスクリプトで正しく書かれていません。これは完全に不要です。実際、あなたが尋ねるほとんどすべての内容は完全に不要です。 「Poor Man's Dæmon Supervisors」と「Bad Loggers」を使用してラッパーシェルスクリプトを作成しないでください。不安定で危険なPIDファイルメカニズムを台無しにしないでください。 Service Managerを使用していますこれらのどれも必要ありません

Type=simpleサービスユニットを設定します。 、、、、、をsystemctl使用でき、完全に使用しても大丈夫です。startstoprestartreloadenabledisable愚かなラッパースクリプトなし。 systemdなどのサービスマネージャ覚えて最初にフォークしたので、プロセスIDです。

プログラムに「デーモン」メカニズムがある場合、オフそして使用しないでください。 daemontoolsなどに感謝します。これは長い間要求されており、多くのプログラムが過去20年以上にわたってこれらのメカニズムを開発してきましたが、他のプログラムでは最初に「デーモン」をデフォルトに設定しないため、デフォルトの動作モードで使用できます。

使用しないでくださいType=forking。手続きがほとんどないので、最後の手段になるはずです。実際、合意は。あなたのプログラムは確かにそうではありません。Type=simple標準として選択してください。初期ソケットを開く(ソケットデバイス構成を使用)、またはType=notifyプログラムがそれをサポートしている場合は使用してください。プログラムの作成者に戻り、LISTEN_FDS初期ソケットを開く(プロトコル)がサポートされておらず、ソケット接続を受信するプログラムである場合は、サポートすることをお勧めします。信号がプログラムを停止しExecStopた場合は、明示的なコマンドを使用しないでください。TERMそうしなければならない。心配しないでください${MAINPID}。ユニットファイルにはその内容はありません。

神の愛のために、初心者が従うことができる単純で直接的なサービスの例としてApacheを使用しないでください。 ApacheはWINCHプロセスを終了する必要があると思います。他の何かを見てください。

追加読書

おすすめ記事