Open21

Daemon on systemd

Toru3Toru3

ローカルな通信だけでも動くならnetwork-online.targetよりnetwork.targetの方が良さそう。
https://happy-nap.hatenablog.com/entry/2022/05/17/001357

Toru3Toru3

Rustでシグナルハンドラを設定したりするには以下の例のようにすると良い。
https://docs.rs/signal-hook/latest/signal_hook/flag/index.html

Toru3Toru3

普通は上で良いけど、パイプとかソケットのread(2)みたいな無限に待つ可能性があるシステムコールは中断してそちらの処理をしたいという場合には上のだと駄目だな。

Toru3Toru3

マルチスレッドのプログラムでシグナルをブロックしたいときは、全スレッドがブロックするようにしないとブロックしてないスレッドで受信してしまう

Toru3Toru3

逆に1つのスレッドを除いてブロックすれば、そのスレッドがシグナルを受信してくれる(はず)

Toru3Toru3

シグナルは別スレッドで処理すれば無限に待っても大丈夫そう。(結局一番上のやり方で良さそう)

Toru3Toru3

sigwaitとsigsuspend似てるけど、waitはどのシグナルが来たか分かり、ハンドラが走らない

Toru3Toru3

suspendもハンドラの引数で分かるが直接戻り値では分からない

Toru3Toru3

ExecReload=kill -HUP $MAINPID は完了を待たないので非推奨とされているが普通にこれでやっているサービスが多いな

Toru3Toru3

Type=notify-reloadにするか(ただし253以降が必要)、ちゃんと完了を待つようなコマンド(例えばD-busとかで)が推奨されている

Toru3Toru3

250以降では認証情報の管理にsystemd-credsが使える。

Toru3Toru3

それ以前は所有者を適切に設定した上でパーミッションを600にしておく位な気がする。
SSHのserver側の秘密鍵(/etc/ssh/ssh_host_ed25519_keyとか)はそうなっているようなので。