systemdのトラブルあるあるネタ

仕事が納まったのでぼんやりしています。 「年末だな〜」→「お笑いとかみてないな〜」→「あるある探検隊みたいな〜」→「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.confMaxRetensionSec=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 つけよう。