サーバー起動時に自動的に立ち上がるサービスが増えすぎると、起動が遅くなるだけでなく、想定外のプロセスが稼働し続けてセキュリティリスクにもつながります。現代のLinuxではsystemdがサービス管理を担っており、systemctlコマンドで一覧表示から有効化・無効化まで一気通貫で操作できます。
起動中のサービス一覧をすぐ確認する
現在実行中のサービスをすべて表示するには次のコマンドを実行します。
systemctl list-units --type=service --state=running
--state=running を外すと、停止中・失敗中を含む全サービスの状態を確認できます。出力が長い場合は | less でページングしながら読むと便利です。
systemctl list-units --type=service | less
自動起動が有効なサービスだけを一覧にする
次回の起動時に自動で立ち上がるサービスを把握したい場合は list-unit-files サブコマンドを使います。
systemctl list-unit-files --type=service
出力の STATE 列が enabled のものが、次回起動時に自動起動するサービスです。各状態の意味は以下のとおりです。
- enabled:自動起動が有効
- disabled:自動起動が無効(手動起動は可能)
- static:他のサービスの依存関係から起動される。直接のenabled/disabledではない
- masked:完全に無効化。手動起動も不可
enabled のサービスのみを絞り込む場合は --state=enabled を加えます。
systemctl list-unit-files --type=service --state=enabled
特定サービスの自動起動設定を確認する
個別のサービスが自動起動に設定されているかどうかは is-enabled で素早く確認できます。
systemctl is-enabled nginx
enabled または disabled が返ります。サービス名が正確でない場合は list-unit-files の出力を grep で絞り込んで探しましょう。
systemctl list-unit-files --type=service | grep ssh
稼働状態(実行中かエラーがないか)も同時に確認するなら status サブコマンドが便利です。Active: active (running) なら起動中、inactive なら停止中です。
systemctl status sshd
不要なサービスの自動起動を無効にする
不要なサービスの自動起動を止めるには disable を使います。以下は bluetooth.service を例にしています。このコマンドだけでは今すぐの停止は行われず、次回起動時から立ち上がらなくなります。
sudo systemctl disable bluetooth.service
今すぐ停止してから自動起動も無効化したい場合は --now オプションが使えます。停止と無効化をひとつのコマンドで同時に実行できます。
sudo systemctl disable --now bluetooth.service
注意:サービスによっては他のサービスの依存関係として使われている場合があります。無効化前に systemctl status でそのサービスへの依存がないかを確認してください。本番サーバーでは事前に変更内容をメモに残し、切り戻し手順を用意しておくことが重要です。
自動起動を有効に戻す
一度無効化したサービスを再び自動起動させたい場合は enable を使います。
sudo systemctl enable sshd.service
今すぐ起動してかつ次回以降も自動起動したい場合も --now が使えます。
sudo systemctl enable --now sshd.service
有効化すると /etc/systemd/system/ 以下にシンボリックリンクが作成されます。変更後は list-unit-files で enabled に変わっていることを確認しましょう。
systemctl list-unit-files --type=service | grep sshd
変更後に確認すべき手順
設定変更後は以下の流れで確認するのが確実です。
systemctl is-enabled <サービス名>で enabled/disabled の状態を確認systemctl status <サービス名>で現在の稼働状態を確認- ユニットファイルを直接編集した場合は
sudo systemctl daemon-reloadを実行 - 可能であれば実機を再起動して、意図どおりに自動起動が制御されているかを検証
daemon-reload は /etc/systemd/system/ 以下のファイルを直接変更した際に必須です。忘れると古いユニット設定がメモリ上に残留したまま再起動されます。
sudo systemctl daemon-reload
ある運用現場では、サービスの無効化後に daemon-reload を忘れたまま再起動したところ、古いユニット設定が残留していたという事例がありました。変更後の daemon-reload と再起動確認をセットにした手順書を組織内で定めることで、こうしたミスを防ぐことができます。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
