MENU

サービスの自動起動設定をパッケージ既定値にリセットする実務手順

サーバー設定作業の途中でサービスの自動起動を誤って変えてしまった、あるいは「もともとどの設定が正しかったのか」わからなくなった場合、systemctl preset を使うと対象サービスの自動起動設定をパッケージ既定値に一発で戻せます。

# 例:chronyd の自動起動設定を既定値に戻す(root 権限が必要)
sudo systemctl preset chronyd

# 変更後の状態を確認
systemctl is-enabled chronyd

以下では、状態の確認方法・手動での切り替え・preset の仕組み・一括リセット時の注意点の順に解説します。

目次

現在の自動起動状態を確認する

作業に入る前に、変更対象のサービスが現在どのような状態にあるかを把握しておきます。特定サービスだけ確認するなら is-enabled、全体を見渡すなら list-unit-files が便利です。

# 特定サービスの自動起動状態を確認
systemctl is-enabled chronyd
# → enabled / disabled / static / masked などが返る

# インストール済みの全サービスを一覧表示
systemctl list-unit-files --type=service

# enabled / disabled に絞り込む
systemctl list-unit-files --type=service | grep -E "^[^ ]+ +(enabled|disabled)"

返り値の意味は以下のとおりです。static は「他のユニットから依存参照されることで起動するが、単独では自動起動しない」状態です。masked は強制的に無効化された状態で、enable しても有効になりません。マスクされているサービスを有効化するには、先に sudo systemctl unmask <サービス名> でマスクを解除する必要があります。

自動起動を手動で有効・無効にする

特定のサービスだけ自動起動を切り替えるには systemctl enable / systemctl disable を使います。--now オプションを付けると、設定変更と同時に即時起動・停止も行われるため、再起動を待たずに状態を反映させたい場面で重宝します。

# 自動起動を有効にする(次回起動から反映)
sudo systemctl enable chronyd

# 有効化して今すぐ起動も行う
sudo systemctl enable --now chronyd

# 自動起動を無効にする
sudo systemctl disable chronyd

# 無効化して今すぐ停止も行う
sudo systemctl disable --now chronyd

手動で enable / disable を繰り返すうちに「本来の既定値はどちらだったか」が不明になるケースがあります。そのような場合に活用するのが、次に説明する preset です。

preset でパッケージ既定値に戻す仕組み

systemctl preset は、ディストリビューションやパッケージが用意したプリセット定義ファイルを参照し、enable か disable かを自動で適用するコマンドです。定義ファイルは /usr/lib/systemd/system-preset/ 以下の *.preset ファイルに記述されています。

# プリセット定義ファイルを確認する
ls /usr/lib/systemd/system-preset/

# 内容を確認する(AlmaLinux 9 / Rocky Linux 9 の例)
cat /usr/lib/systemd/system-preset/90-default.preset

# 対象サービスを既定値に戻す
sudo systemctl preset chronyd

# 複数サービスをまとめて戻すことも可能
sudo systemctl preset sshd chronyd firewalld

ある運用現場では、新規サーバーの構築作業中に手順書のコピペミスで sshd の自動起動が外れた状態のまま納品されたことがありました。再起動後に SSH 接続できなくなって発覚したケースで、次回からは systemctl preset sshd を構築完了チェックリストに加えるようになったそうです。

プリセット定義に記載されていないサービスは preset を実行しても何も変わりません。サードパーティ製パッケージや自作のサービスユニットはプリセット未登録であることが多く、その場合は手動で enable / disable を判断します。

全サービスを一括リセットする場合の注意点

すべてのサービスのプリセットを一度に適用したい場合は systemctl preset-all を使います。ただし、手動で追加した enable 設定も含めてすべて上書きされるため、本番環境での実行は十分に注意が必要です。

# 実行前に現在の状態を記録しておく(preset-all には --dry-run がない)
systemctl list-unit-files --type=service > /tmp/before-preset-all.txt

# 全サービスを既定値にリセット(本番環境では要注意)
sudo systemctl preset-all

# 適用後の状態と比較する
systemctl list-unit-files --type=service > /tmp/after-preset-all.txt
diff /tmp/before-preset-all.txt /tmp/after-preset-all.txt

preset-all--dry-run に相当するオプションを持たないため、実行前に必ず現在の状態をファイルへ保存してください。誤って適用した場合の復旧は、diff の出力を見ながら個別に enable / disable を再実行するしかなく、手間がかかります。定期的な初期化が目的の場合は、対象サービスを個別に指定する運用が安全です。

旧来の環境からの移行で押さえるコマンド対応

CentOS 6 以前の chkconfig ベースの環境から移行した担当者向けに、主要コマンドの対応関係を整理します。

# 【状態確認】
# chkconfig --list              → systemctl list-unit-files --type=service
# chkconfig --list ntpd         → systemctl is-enabled chronyd

# 【自動起動の切り替え】
# chkconfig ntpd on             → systemctl enable chronyd
# chkconfig ntpd off            → systemctl disable chronyd
# chkconfig ntpd reset          → systemctl preset chronyd

# 【サービスの操作】
# service ntpd status           → systemctl status chronyd
# service ntpd restart          → systemctl restart chronyd

旧来の chkconfig reset に相当するのが systemctl preset です。ランレベル(0〜6)の概念は systemd ではターゲットmulti-user.targetgraphical.target など)に置き換わっています。chkconfig でランレベルごとに on/off を細かく指定していたケースは、systemd ではユニットファイル内の WantedBy= ディレクティブで対象ターゲットを指定する形になります。

AlmaLinux 9 / Rocky Linux 9 / Ubuntu 22.04 以降では chkconfig コマンド自体がデフォルトでインストールされていません。既存の構築スクリプトや手順書に chkconfig が残っている場合は、systemctl ベースへの書き直しを計画的に進めることをお勧めします。

<PR>この記事に関連するおすすめ書籍

新しいLinuxの教科書 第2版

コマンド操作から基本的な運用までを手を動かしながら体系的に学べる定番書。地力を固めたい方に。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次