仕事が納まったのでぼんやりしています。 「年末だな〜」→「お笑いとかみてないな〜」→「あるある探検隊みたいな〜」→「systemdあるある探検隊〜」ということでつい書いてしまったやつ
Restart=on-failure にして kill
したら再起動しない! → SIGTERMによる終了は正常終了だから再起動したかったら
Restart=always
にしようねsystemctl statusしたら
Notice: journal has been rotated since unit was started, output may be incomplete.
って出てる! 障害なの!?→ 英語よんでくれたのむ
timer unitで「1時間以内で適当にずらしたい」ときに
AccuracySec=1hour
とか定義しちゃう。→それ最大1分しかずれないし、君が使うべきなのは
RandomizedDelaySec=
だよ「1ヶ月分ログを保持してほしい」と
journald.conf
にMaxRetensionSec=1month
とか書いちゃう。→ それ1ヶ月以上前のログが含まれてるファイルは消すって意味だよ。最低これだけ保持しろっていう指定はできないよ。
timer unitをdrop-in で変更するときに いきなり
OnCalendar=Wed
とか書いちゃってオリジナルの起動タイミングに追加しちゃう。→ 一回
OnCalendar=
だけの行でリセットして!「他の全部が起動したあとにサービス起動するには?」という実現不可能な問いからはじめる。
→ 必要になったら起動する(シャットダウンまで結局起動しない)サービスも沢山あるからそんなタイミングは存在しないよ!
service unitがいつactiveになるかを理解せずに
After=
やRequire=
をいじって起動順序をなんとかしようとして時間を溶かす。→ man systemd.serviceの
Type=
読んで。「systemd-journald気にいらない」という人が雑に無効にする結果ほとんどのサービスやkernelのログがどこにも保存されない
→ 無効にする前に理解しような
クッッソ古いバージョンを使ってるせいでshutdown時にswap待ちで30分ボーッと待ってる
→ RHEL 8.3でなおってるよ!
CPUをバカ食いするソフトが自分に
CPUQuota=
を指定したせいでCPU Accountingが有効になりリアルタイム優先度のプロセスが起動できない(cgroup v1のみ)→ cgroup v2つかえば幸せになれるよ
ユーザ用systemdの
Reached target Shutdown
を見て「シャットダウンしてないのにシャットダウン!?」ってびっくりする→ PIDが1かそれ以外かで全然意味違うで
/usr/lib 以下の unit fileを編集してアップデートで消しちゃう
→ 編集していいのは/etc以下だけ。
service unitが呼び出すスクリプトでsuを使っててシャットダウン時の停止順序がグチャグチャになる
→ suもsudoもrunuser -lも禁止。runuserか User=で
journalを永続化してなくてシャットダウン時のログがなにもわからん
→ トラブル時に調査がいるシステムはとりあえず
mkdir /var/log/journal
NFSが関係するbind mountを定義して前後関係がループしちゃう
→ systemdじゃなくてNetworkManagerを使うRHELのせいな気はするが、 fstabに
_netdev
つけよう。