生成されたプロセスを再起動または終了する組み込みコマンドを持たないバイナリがあります。組み込みのCentOSサービスの一部を見た後、利便性SIGHUP
などを尊重するサービスが多いため、テンプレートとして使用できないという結論に達しました。これは、実行して制御するために.shスクリプトを生成する必要があることを意味します。これが私が経験している問題の一部です。単位テンプレートには次のモジュールがあります。PIDファイルしかし、ドキュメントに情報が見つかりませんPID
systemdが起動するプロセスを管理および追跡する場合、これはPID file
サービスが独自に作成されることを示す方法にすぎません。最初のケースでは、バイナリ自体ではなく/ bin / shを介して実行されるスクリプトの場合、どのように正しく追跡しますか?sh process
PIDをキャプチャしませんか?
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
使用でき、完全に使用しても大丈夫です。start
stop
restart
reload
enable
disable
愚かなラッパースクリプトなし。 systemdなどのサービスマネージャ覚えて最初にフォークしたので、プロセスIDです。
プログラムに「デーモン」メカニズムがある場合、オフそして使用しないでください。 daemontoolsなどに感謝します。これは長い間要求されており、多くのプログラムが過去20年以上にわたってこれらのメカニズムを開発してきましたが、他のプログラムでは最初に「デーモン」をデフォルトに設定しないため、デフォルトの動作モードで使用できます。
使用しないでくださいType=forking
。手続きがほとんどないので、最後の手段になるはずです。実際、合意は。あなたのプログラムは確かにそうではありません。Type=simple
標準として選択してください。初期ソケットを開く(ソケットデバイス構成を使用)、またはType=notify
プログラムがそれをサポートしている場合は使用してください。プログラムの作成者に戻り、LISTEN_FDS
初期ソケットを開く(プロトコル)がサポートされておらず、ソケット接続を受信するプログラムである場合は、サポートすることをお勧めします。信号がプログラムを停止しExecStop
た場合は、明示的なコマンドを使用しないでください。TERM
そうしなければならない。心配しないでください${MAINPID}
。ユニットファイルにはその内容はありません。
神の愛のために、初心者が従うことができる単純で直接的なサービスの例としてApacheを使用しないでください。 ApacheはWINCH
プロセスを終了する必要があると思います。他の何かを見てください。
追加読書
- ジョナサン・ドボイン・ポラード(2001)。 Unixデーモンを設計する際に避けるべき間違い。一般的な答え。
- ジョナサンデボインポラード(2015)。実際にデーモンは必要ありません。本当。。体系化された恐怖の家。
- ジョナサンデボインポラード(2015)。Unixデーモンの準備プロトコルの問題。よく与えられる答えです。