以下の内容はhttps://iww.hateblo.jp/entry/20250819/systemdより取得しました。


systemdで、ターゲットユニットを書く

A をstart,stopするだけで B,C,D がうまく開始や停止するやつは ターゲットユニットと呼ぶらしい。


A.target を起動したら
B.service を起動し、続けて C.socket、D.socket を起動する
C.socket で待ち受け、着信したら C@.service を起動する

また、Aを終了すると
B をstopで起動した上で C,D を停止する

A.target

[Unit]
Description = システム起動 全体統括
Requires = B.service C.socket D.socket
After = B.service

[Install]
WantedBy = multi-user.target

Aが立ち上がったときに B,C,D を自動で起動する。 さらに、Bを先に起動する

B.service

[Unit]
Description = 起動、終了 前処理
PartOf = A.target

[Service]
Type = oneshot
RemainAfterExit = yes
ExecStart = /opt/hoge/bin/B.sh start
ExecStop = /opt/hoge/bin/B.sh stop

システムの前処理をするプログラム。 常駐はしないので Typeを OneShot にする
このとき RemainAfterExit = yes にしておくと、終了してもinactive扱いにならない

C.socket

[Unit]
Description = サーバ ソケット C
PartOf = A.target

[Socket]
ListenStream = 0.0.0.0:12345
Accept = yes

[Install]
WantedBy = sockets.target

プログラムC の待ち受けを設定
プログラムD も同じ

C@.service

[Unit]
Description = サーバ プログラム C

[Service]
ExecStart = /opt/hoge/bin/C.php
StandardInput = socket
StandardOutput = socket
StandardError = journal

待ち受け後に プログラムC を起動するための設定。
この設定のときは、プログラムC が動作している最中に C.socket の停止や再起動が発生しても プログラムC は停止しない。
sshとかの挙動と同じ。




以上の内容はhttps://iww.hateblo.jp/entry/20250819/systemdより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14