LinuCレベル2 システムの起動とLinuxカーネル 問41
システムの起動とLinuxカーネル/システム起動のカスタマイズパッケージが提供するユニットファイル/usr/lib/systemd/system/httpd.serviceに、Restart=on-failureの設定を追加したい。パッケージの更新で上書きされず、システムの再起動後も有効な方法として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「システムの起動とLinuxカーネル」に対応。実際の試験問題ではありません)
- Asystemctl edit httpd.serviceを実行し、開いたエディタで[Service]にRestart=を書く
- B/usr/lib/systemd/system/httpd.serviceに直接追記し、systemctl daemon-reloadする
- C/run/systemd/system/httpd.service.d/に、Restart=を書いた.confファイルを置く
- Dsystemctl cat httpd.serviceで表示された内容を編集し、そのまま上書き保存する
正解:A
解説
systemctl editは、/etc/systemd/system/httpd.service.d/override.confというドロップインファイルを作成・編集するコマンドです。ドロップインに書いた項目だけが元のユニットファイルの設定に追加・上書きされるため、パッケージの更新で/usr/lib側のファイルが置き換わっても変更は残ります。ユニットファイル全体を/etc/systemd/system/へ複製して編集したい場合はsystemctl edit --fullを使います。こうした上書き・拡張の状況は、systemd-deltaで一覧できます。
選択肢ごとの解説
- A正しい。systemctl editで作られるドロップインは/etc/systemd/system/配下に置かれ、元のユニットファイルに対する追加・上書きとして扱われます。
- B誤り。/usr/lib/systemd/system/はパッケージが管理するファイルの置き場で、パッケージを更新すると直接加えた変更が失われるおそれがあります。
- C誤り。/run/systemd/system/配下は実行時の一時的な置き場で、再起動すると内容が消えます。ドロップイン自体は有効ですが、要件の「再起動後も有効」を満たしません。
- D誤り。systemctl catはユニットファイルとドロップインの内容を表示するだけのコマンドで、表示内容を編集して保存する機能はありません。