スポンサーリンク

systemctlコマンドの使い方|Linuxでサービスの起動・停止・状態確認をする方法

Linux
スポンサーリンク

Linuxサーバーを運用していると、サービスの状態を確認したり、起動・停止したりする場面がよくあります。

systemdを採用しているLinuxでは、サービスを管理するときにsystemctlコマンドを使います。

私もLinuxサーバーの運用・保守では、サービスの状態確認や再起動などでsystemctlを使う機会があります。

systemctlには多くの機能がありますが、普段のサーバー運用でよく使うコマンドはある程度決まっています。

この記事では、systemctlの基本から、サービスの状態確認、起動・停止・再起動、自動起動の設定まで紹介します。

スポンサーリンク

systemctlとは

systemctlは、systemdを操作するためのコマンドです。

systemdでは「Unit(ユニット)」と呼ばれる単位でサービスなどを管理しています。

Unitにはいくつか種類がありますが、サーバー運用でよく触れるのが.serviceです。

たとえば、Apache HTTP Serverであれば、

httpd.service

SSHサーバーであれば、

sshd.service

といった名前で管理されています。

systemctlを使うことで、こうしたサービスに対して、

  • 現在の状態を確認する
  • 起動する
  • 停止する
  • 再起動する
  • 設定を再読み込みする
  • OS起動時に自動起動するよう設定する
  • 自動起動を無効にする

といった操作ができます。

サービスに問題が発生したときだけでなく、設定ファイルを変更したあとなどにも使うことが多いコマンドです。

サービスの状態を確認する

まず覚えておきたいのがstatusです。

サービスの現在の状態を確認するときは、次のように実行します。

systemctl status httpd.service

環境によっては権限が必要になるため、その場合はsudoを付けます。

sudo systemctl status httpd.service

実行すると、サービスが現在動いているかどうかだけでなく、PIDや起動してからの時間なども確認できます。

特に確認しておきたいのがActiveの部分です。

正常に起動しているサービスでは、

Active: active (running)

のように表示されます。

反対に、起動に失敗している場合は、

Active: failed

などと表示されます。

サービスに問題がありそうなときは、まずsystemctl statusで現在の状態を確認するところから始めると分かりやすいです。

サービスを起動する

停止しているサービスを起動するときは、startを使います。

sudo systemctl start httpd.service

コマンドを実行しても、正常に処理された場合は特にメッセージが表示されないことがあります。

起動できたか確認したい場合は、続けてstatusを実行します。

systemctl status httpd.service

または、サービスが現在動作しているかだけを簡単に確認するなら、is-activeも使えます。

systemctl is-active httpd.service

起動していれば、

active

と表示されます。

サービスを停止する

動作しているサービスを停止するときは、stopを使います。

sudo systemctl stop httpd.service

停止後に状態を確認するなら、

systemctl status httpd.service

を実行します。

サービス停止時は影響を確認する

systemctl stopは、実際にサービスを停止するコマンドです。

Webサーバーを停止すればWebサービスが利用できなくなるなど、実行するサービスによってはユーザーやほかのシステムに影響が出ます。

特に本番環境などで実行する場合は、

  • 停止して問題ないサービスなのか
  • ほかのシステムから利用されていないか
  • 作業時間として問題ないか

などを確認してから実行した方が安全です。

サービスを再起動する

サービスを再起動するときは、restartを使います。

sudo systemctl restart httpd.service

設定ファイルを変更したあとなどに使うことがあります。

restartでは、対象のサービスを停止してから再度起動します。

そのため、サービスによっては一時的に利用できない時間が発生します。

設定変更後に何となくrestartするのではなく、そのサービスで再起動が必要なのか確認してから実行するのがいいでしょう。

また、restartを実行したあとは、

systemctl status httpd.service

で正常に起動しているか確認しておくと安心です。

設定だけを再読み込みする

サービスによっては、停止・起動を行わずに設定ファイルを再読み込みできるものがあります。

その場合はreloadを使います。

sudo systemctl reload httpd.service

restartとは違い、サービスを動作させたまま設定を再読み込みできるのが特徴です。

ただし、すべてのサービスがreloadに対応しているわけではありません。

reloadに対応していないサービスでは、restartなど別の方法が必要になります。

サービスの仕様を確認したうえで使い分けるようにしましょう。

OS起動時にサービスを自動起動する

Linuxを再起動したあとも自動的にサービスを起動したい場合は、enableを使います。

sudo systemctl enable httpd.service

これで、OS起動時に対象サービスが起動するよう設定できます。

startとenableは意味が違う

systemctlを使い始めたときに少し分かりにくいのが、startとenableの違いです。

startは、

今、サービスを起動する

ためのコマンドです。

sudo systemctl start httpd.service

一方のenableは、

OS起動時にサービスが自動的に起動するよう設定する

ためのコマンドです。

sudo systemctl enable httpd.service

そのため、enableを実行しただけでは、現在停止しているサービスが必ずその場で起動するわけではありません。

現在のサービスも起動し、さらに自動起動も有効にしたい場合は、それぞれ実行する方法があります。

sudo systemctl start httpd.service
sudo systemctl enable httpd.service

また、--nowを付ければ一度に実行できます。

sudo systemctl enable --now httpd.service

これなら、自動起動を有効にすると同時にサービスも起動できます。

自動起動が有効になっているか確認する

サービスの自動起動設定を確認するときは、is-enabledを使います。

systemctl is-enabled httpd.service

自動起動が有効なら、

enabled

と表示されます。

サービスを設定したあとに、

systemctl is-active httpd.service
systemctl is-enabled httpd.service

の両方を確認すると、

「現在サービスが動いているか」

「OS再起動後も自動的に起動する設定になっているか」

をそれぞれ確認できます。

サービスの自動起動を無効にする

OS起動時にサービスを自動起動させたくない場合は、disableを使います。

sudo systemctl disable httpd.service

ここでも注意したいのが、disableとstopの違いです。

disableは自動起動を無効にするコマンドなので、現在動いているサービスを停止する操作とは別です。

現在のサービスも停止したい場合は、

sudo systemctl stop httpd.service

も実行します。

または、--nowを使って、

sudo systemctl disable --now httpd.service

とすれば、自動起動を無効にすると同時に現在動いているサービスも停止できます。

ただし、サービスを停止する操作になるため、実行する場合は影響を確認しておきましょう。

サービスの一覧を確認する

現在ロードされているサービスUnitの一覧を確認する場合は、次のコマンドを使えます。

systemctl list-units --type=service

サービス名が分からない場合や、現在どのようなサービスがロードされているのか確認したいときに使えます。

すべてのservice Unitファイルと有効・無効などの状態を確認したい場合は、

systemctl list-unit-files --type=service

という方法もあります。

表示されるサービスはかなり多くなることがあるため、必要に応じて絞り込みながら確認するといいでしょう。

サービス名が分からない場合

systemctlを使うときに意外と困るのが、サービス名が分からない場合です。

ソフトウェア名とsystemd上のサービス名が必ずしも同じとは限りません。

たとえば、サービスの一覧から探す方法があります。

systemctl list-units --type=service

Unitファイルを含めて確認するなら、

systemctl list-unit-files --type=service

を使います。

サービス名が分からない状態で適当に指定するより、まず正しいUnit名を確認してから操作する方が安全です。

サービスが起動しないときはjournalctlも確認する

systemctl startやsystemctl restartを実行したものの、サービスが正常に起動しないこともあります。

そんなときは、まずstatusを確認します。

systemctl status httpd.service

ここでfailedになっている場合などは、journalctlで詳しいログを確認します。

journalctl -u httpd.service

現在のOS起動後のログだけに絞るなら、

journalctl -u httpd.service -b

といった使い方もできます。

私もサービスに問題が発生したときは、

systemctl status
        ↓
journalctl -u

という流れで状態とログを確認することがあります。

systemctlはサービスの「状態」を確認・操作するために使い、journalctlは「なぜその状態になったのか」をログから調べる、と考えると分かりやすいと思います。

journalctlについては、別の記事で基本的な使い方を詳しく紹介しています。

※ここにjournalctlの記事への内部リンクを設定

maskとdisableの違い

もう少し踏み込んだ使い方として、systemctlにはmaskもあります。

sudo systemctl mask サービス名

disableはOS起動時の自動起動を無効にするものですが、手動でサービスを起動することはできます。

一方、maskすると、通常の方法ではそのUnitを起動できない状態になります。

マスクを解除するときは、

sudo systemctl unmask サービス名

を使います。

maskはdisableより強い制限になるため、「自動起動を止めたい」というだけなら、何となくmaskを使うのではなくdisableとの違いを理解したうえで使った方が安全です。

よく使うsystemctlコマンドまとめ

今回紹介したsystemctlコマンドをまとめると、次のようになります。

コマンド用途
systemctl status サービス名サービスの状態を確認する
systemctl start サービス名サービスを起動する
systemctl stop サービス名サービスを停止する
systemctl restart サービス名サービスを再起動する
systemctl reload サービス名設定を再読み込みする
systemctl is-active サービス名サービスが動作中か確認する
systemctl enable サービス名OS起動時の自動起動を有効にする
systemctl disable サービス名OS起動時の自動起動を無効にする
systemctl is-enabled サービス名自動起動設定を確認する
systemctl enable --now サービス名自動起動を有効にしてサービスも起動する
systemctl disable --now サービス名自動起動を無効にしてサービスも停止する
systemctl list-units --type=serviceロードされているサービスを一覧表示する

最初からすべて覚える必要はありません。

私なら、まずは、

systemctl status サービス名
sudo systemctl start サービス名
sudo systemctl stop サービス名
sudo systemctl restart サービス名
sudo systemctl enable サービス名

このあたりを覚えておけば、基本的なサービス管理ではかなり使えると思います。

特にstatusは、何か問題が起きたときの確認でもよく使うので、最初に覚えておきたいコマンドです。

systemctlを使うときの注意点

systemctlは状態確認だけでなく、実際にサービスを停止・再起動したり、自動起動設定を変更したりできるコマンドです。

そのため、特にサーバー環境で操作するときは注意が必要です。

たとえば、

sudo systemctl stop sshd.service

のように、現在の接続やシステムの利用に関係するサービスを停止すると、作業に影響する可能性があります。

本番環境などで操作するときは、

  • 操作するサービス名が正しいか
  • stopやrestartによる影響はないか
  • ほかのサービスから利用されていないか
  • 自動起動設定を変更して問題ないか

などを確認してから実行するようにしましょう。

特にstop、restart、disable --nowなどは実際に動いているサービスへ影響するため、確認せずに実行するのは避けた方が安全です。

まとめ

systemctlは、systemdを採用しているLinuxでサービスを管理するときによく使うコマンドです。

サービスの状態確認だけでなく、

  • 起動
  • 停止
  • 再起動
  • 設定の再読み込み
  • 自動起動の有効化・無効化

など、サーバー運用で必要になる基本的な操作を行えます。

特に最初は、startとenable、stopとdisableを混同しないようにすると分かりやすいと思います。

「現在のサービスを操作する」のがstartやstop、「OS起動時の動作を設定する」のがenableやdisableと覚えておけば整理しやすいです。

また、サービスが正常に起動しない場合はsystemctlだけで原因を探そうとせず、journalctlも一緒に使うと調査しやすくなります。

私もLinuxサーバーを扱うときはsystemctlとjournalctlを組み合わせて確認することがあります。

まずは今回紹介した基本的なコマンドを覚えて、必要になったときにほかの機能も調べながら使っていけば十分だと思います。

関連記事

サービスが起動しない場合など、詳しいログを確認したいときはjournalctlを使います。

「journalctlコマンドの使い方|Linuxでログを確認・絞り込みする方法」

journalctlコマンドの使い方|Linuxでログを確認・絞り込みする方法
Linuxサーバーを運用していると、「サービスが起動しない」「突然エラーが発生した」といったトラブルに遭遇することがあります。そんなとき、原因を調べるために確認するのがログです。systemdを採用しているLinuxでは、journalct…

Linuxサーバーで設定ファイルを編集するときによく使うviについても、別の記事で基本的な使い方を紹介しています。

「viコマンドの基本的な使い方」

viコマンドの使い方|Linuxでよく使う基本操作と実務コマンド
仕事で久しぶりにLinux環境を触る機会があり、viエディタを使う場面があった。普段はGUIのエディタを使うことが多いため、基本操作を少し忘れている部分もあり、改めて最低限の操作は覚えておく必要があると感じた。今回は、実際の作業でよく使うv…

参考資料

コメント

タイトルとURLをコピーしました