(最終更新月:2023年5月)
✔このような方へ向けて書かれた記事となります
「systemctlって何ができるのだろうか?」
「systemctlの使い方が知りたい」
「systemctlの具体例を見せてほしい」
✔当記事を通じてお伝えすること
- systemctlとは?
- systemctlの基本・書き方
- systemctlの実例
当記事では、systemctlの基本的な書き方はもちろん、その実例や場面別の役立つケースなどについても詳しく解説しています。
ぜひ最後までご覧ください。
systemctlのコマンド一覧
こちらはコマンドの一覧です。
何ができるかを知りたい人はこちらをどうぞ。
詳しく中身を知りたい方は次章以降を読み進めてください。
カテゴリ | コマンド | 説明 |
---|---|---|
サービス管理用 | sudo systemctl start [サービス名] | サービスの開始 |
sudo systemctl stop [サービス名] | サービスの停止 | |
sudo systemctl restart [サービス名] | サービスの再起動 | |
システム管理用 | sudo systemctl reboot | システムの再起動 |
sudo systemctl poweroff | システムのシャットダウン | |
ログ管理用 | sudo journalctl | 全ログの表示 |
sudo journalctl -u [サービス名] | 特定のサービスのログ表示 | |
sudo journalctl -f | 最新のログ表示 |
systemctlを理解するための前提知識
systemctlを理解するためには以下のことを知っておきましょう。
概要を理解すれば、使い方をスムーズに覚えられます。
- Linuxとシステム管理
- systemdとsystemctlの概要
- systemdの役割
- systemdのメリット
- systemdと従来のinitシステムの違い
Linuxとシステム管理
Linuxはオープンソースのオペレーティングシステムで、サーバーやデスクトップ環境で幅広く利用されています。
Linuxシステム管理では、コンピュータの運用に必要な、以下のタスクを実行します。
- アプリケーションやデーモン(バックグラウンドで実行されるプログラム)などのサービスの起動や停止
- システムの状態確認
- ログの分析
- セキュリティの強化
例えば、WebサーバーのApacheやデータベースのMySQLを管理する場合、それらのサービスをいつ開始・停止するか、どのように監視・管理するかがLinuxシステム管理の一部となります。
systemdとsystemctlの概要
systemdはLinuxで利用されるデファクトスタンダードな初期化システムで、システムの起動時に各種サービスを立ち上げる役割を担います。
systemctlは、systemdの制御や管理のためのコマンドラインツールで、サービスの起動・停止・再起動や状態確認など、さまざまな操作ができるものです。
systemdの役割
具体的にsystemdがおこなうことはこちら。
- Linuxシステムの初期化
- サービス管理
- ログ管理
systemdの役割は、”ユニット”と呼ばれる設定ファイルを読み込み、各種サービスやタスクを適切な順序で起動・管理することです。
ユニットにはサービス(service)、タイマー(timer)、ソケット(socket)などが含まれ、それぞれが特定の機能を果たしています。
例えばSSHサーバーを起動する場合、sshd.serviceというユニットが存在し、systemdはこのユニットを使用してSSHサーバーを管理しているのです。
systemdのメリット
systemdは従来のinitシステムに比べて、以下のようなメリットがあります。
- 起動速度の向上: 依存関係を解決し、同時並行でサービスを起動
- サービス管理の柔軟性: サービスの再起動やデーモンの再ロードが容易
- 依存関係の自動解決: サービス間の依存関係を自動的に検出し、必要な順序で起動
systemdと従来のinitシステムの違い
従来のinitシステム(System V initやUpstartなど)は、シェルスクリプトを用いてシステム起動時のサービスを順序立てて実行していました。
これに対して、systemdはバイナリ形式のユニットファイルを使用し、依存関係を明確に表現できます。
また、systemdはシステム全体の状態管理を一元化し、より効率的なシステム管理が可能となっています。
systemctlの基本的な使い方
systemctlの基本的な使い方を確認していきます。
まずは構文やその開始方法などを覚えましょう。
- systemctlコマンドの構文
- サービスの開始、停止、再起動
- サービスの状態確認
- システムの再起動とシャットダウン
systemctlコマンドの構文
systemctlの基本的なコマンド構文は以下の通りです。
systemctl [オプション] [コマンド] [ユニット名]
サービスの開始、停止、再起動
systemctlを使って、サービスの開始、停止、再起動ができます。
以下は、Apacheウェブサーバー(httpdサービス)の例です。
#サービスの開始
sudo systemctl start httpd
#サービスの停止
sudo systemctl stop httpd
#サービスの再起動
sudo systemctl restart httpd
サービスの状態確認
systemctlを使って、サービスの状態を確認できます。
以下のコマンドで、httpdサービスの状態を表示します。
sudo systemctl status httpd
システムの再起動とシャットダウン
systemctlでは、システム全体の再起動やシャットダウンも行えます。
#システムの再起動
sudo systemctl reboot
#システムのシャットダウン
sudo systemctl poweroff
systemctlのオプション一覧
こちらはオプションの一覧です。
できることはたくさんあるので、ぜひ参考にしてください。
オプション名 | 説明 | 例 |
---|---|---|
–all, -a | すべてのユニットを一覧表示する | sudo systemctl list-units –all |
–type, -t | 指定したユニットタイプに絞り込んで一覧表示する | sudo systemctl list-units –type=service |
–state, -l | 指定した状態のユニットに絞り込んで一覧表示する | sudo systemctl list-units –state=running |
–failed, -f | 起動に失敗したユニットを一覧表示する | sudo systemctl –failed |
–no-pager, -P | 出力をページャーを使わずに表示する | sudo systemctl list-units –no-pager |
–user, -u | ユーザーモードでコマンドを実行する | systemctl –user list-units |
–system, -S | システムモードでコマンドを実行する | sudo systemctl –system list-units |
–global, -G | グローバル設定に対してコマンドを実行する | sudo systemctl –global daemon-reload |
–quiet, -q | 出力を最小限に抑える | sudo systemctl –quiet start my_service |
–now, -n | サービスの有効化・無効化と同時に、即時起動・停止する | sudo systemctl enable –now my_service |
–root, -r | 指定したルートディレクトリを基準にコマンドを実行する | sudo systemctl –root=/mnt list-units |
–job-mode, -M | ジョブモードを指定してコマンドを実行する | sudo systemctl start –job-mode=replace apache |
インストールと設定
もしsystemdとsystemctlのインストールがされていない方は、以下の方法でインストールしましょう。
- 必要なパッケージのインストール
- 環境設定と初期設定
必要なパッケージのインストール
多くのLinuxディストリビューションでは、systemdとsystemctlがデフォルトでインストールされています。
もし、インストールされていない場合は、ディストリビューションのパッケージマネージャーを使ってインストールします。
例えば、UbuntuやDebianでは`apt`コマンド、CentOSやFedoraでは`dnf`コマンドを使用してインストールできます。
環境設定と初期設定
systemdは、/etc/systemd/systemディレクトリ内にあるユニットファイルを読み込むことで、サービスの設定をおこないます。
これらのファイルを編集することで、サービスの挙動や依存関係を変更できます。
また、ユーザーが作成したカスタムユニットファイルは、/etc/systemd/systemディレクトリ内に配置します。
サービスの管理
こちらは各サービスを有効化する方法です。
- サービスの有効化と無効化
- サービスのリスト表示と検索
- サービスの作成と編集
サービスの有効化と無効化
systemctlを使って、サービスの自動起動設定を有効化・無効化できます。
以下のコマンドで、httpdサービスを自動起動に設定・解除します。
#サービスの有効化
sudo systemctl enable httpd
#サービスの無効化
sudo systemctl disable httpd
サービスのリスト表示と検索
systemctlを使って、システム上の全サービスのリストを表示し、特定のサービスを検索できます。
#サービスのリスト表示
sudo systemctl list-units --type=service
#サービスの検索
sudo systemctl list-units --type=service | grep [検索キーワード]
サービスの作成と編集
systemdユニットファイルを作成・編集することで、カスタムサービスを作成・管理できます。
ユニットファイルは通常、/etc/systemd/systemディレクトリに置かれます。
以下は、簡単なカスタムサービス(my_service.service)を作成する手順です。
- ユニットファイルを作成
- ファイルへの記述
- ファイルを保存
- systemdに変更を通知
- サービスを有効化
1. ユニットファイルを作成
sudo nano /etc/systemd/system/my_service.service
2. ファイルへの記述
[Unit]
Description=My Custom Service
[Service]
ExecStart=/path/to/your/executable
[Install]
WantedBy=multi-user.target
ここで、`/path/to/your/executable`は、実行したいプログラムのパスに置き換えてください。
3. ファイルを保存
保存して終了します。
4. systemdにユニットファイルの変更を通知
sudo systemctl daemon-reload
5. サービスを有効化
有効化後に起動しています。
sudo systemctl enable my_service
sudo systemctl start my_service
タイマーの管理
タイマーの管理もできます。
以下がその方法です。
- タイマーの作成と編集
- タイマーの有効化と無効化
- タイマーの一覧表示と状態確認
タイマーの作成と編集
systemdのタイマー機能を使って、定期的なタスクを実行できます。
タイマーは、対応するサービスとセットで作成されます。
- タイマー用ファイルの作成
- ファイルへの記述
- サービスのユニットファイルを作成
- ファイルを保存・終了
- systemdに変更の通知
- タイマーを有効化
1. タイマー用ファイルの作成
タイマー用のユニットファイル(my_timer.timer)を作成:
sudo nano /etc/systemd/system/my_timer.timer
2. ファイルへの記述
ファイルに以下の内容を記述します。
[Unit]
Description=My Custom Timer
[Timer]
OnCalendar=*-*-* 12:00:00
Unit=my_timer.service
[Install]
WantedBy=timers.target
これは、毎日正午に`my_timer.service`を実行する設定です。
3. サービスのユニットファイルを作成
タイマーに対応するサービスのユニットファイル(my_timer.service)を作成し、実行内容を記述します。
4.ファイルを保存・終了
ファイルを保存して終了します。
5. systemdに変更の通知
systemdにユニットファイルの変更を通知
sudo systemctl daemon-reload
6. タイマーを有効化
タイマーを有効化し、起動します。
sudo systemctl enable my_timer.timer
sudo systemctl start my_timer.timer
タイマーの有効化と無効化
タイマーの自動起動設定を有効化・無効化できます。
以下のコマンドで、my_timerタイマーを自動起動に設定・解除します。
#タイマーの有効化
sudo systemctl enable my_timer.timer
#タイマーの無効化
sudo systemctl disable my_timer.timer
タイマーの一覧表示と状態確認
systemctlを使って、システム上の全タイマーのリストを表示し、特定のタイマーの状態を確認できます。
#タイマーのリスト表示
sudo systemctl list-timers
#タイマーの状態確認
sudo systemctl status my_timer.timer
システムの状態とログの確認
システム全体やログを確認する方法です。
- システム全体の状態確認
- ユニットの状態確認
- システムのログ確認方法
システム全体の状態確認
systemctlを使って、システム全体の状態を確認できます。以下のコマンドでシステムの状態を表示します。
sudo systemctl list-units
ユニットの状態確認
systemctlを使って、特定のユニット(サービス、タイマーなど)の状態を確認できます。以下のコマンドで、my_serviceサービスの状態を表示します。
sudo systemctl status my_service.service
システムのログ確認方法
systemdでは、システムのログを一元管理するために、`journalctl`コマンドを提供しています。以下のように、ログを確認できます。
#全ログの表示
sudo journalctl
#特定のサービスのログ表示
sudo journalctl -u my_service.service
#最新のログ表示
sudo journalctl -f
セキュリティとベストプラクティス
セキュリティ上、気をつけておかなければならないことも見ておきましょう。
システムに直接働きかけるコマンドでは注意が必要です。
- セキュリティ上の注意点
- ベストプラクティスと推奨設定
セキュリティ上の注意点
systemdとsystemctlを使用する際、以下のセキュリティ上の注意点を押さえておくことが重要です。
- ユニットファイルのアクセス権限を適切に設定する
- サービスの実行ユーザーを指定し、root権限での実行を避ける
ベストプラクティスと推奨設定
systemdを効果的に使用するためのベストプラクティスや推奨設定を以下に示します。
- サービスの自動再起動設定: サービスが異常終了した場合に自動で再起動する設定を行う
- タイムアウト設定: サービスの起動や停止に時間制限を設ける
ハンズオンチュートリアルと実践例
もっと学びたい方は以下を参考にしてください。
- 実践的なシナリオを通じた学習
- チュートリアルと演習問題
実践的なシナリオを通じた学習
systemdやsystemctlの使い方を身につけるために、実践的なシナリオを通じたチュートリアルや演習問題を提供しています。
これらの教材を活用して、実際のシステム管理タスクに対応できるようになりましょう。
チュートリアルと演習問題
チュートリアルや演習問題を通じて、systemdやsystemctlの実践的な利用法を学べます。
具体的なシナリオを想定して、以下のような問題を解いていきましょう。
- Webサーバーの自動起動設定
- バックアップスクリプトの定期実行設定
- システムのリソース監視と通知設定
トラブルシューティングとFAQ
systemdやsystemctlを使用する際には、いくつかの一般的な問題に遭遇することがあります。
以下に、よくある問題とその解決策を挙げます。
サービスが起動しない
ユニットファイルの記述を確認し、実行ファイルのパスや権限をチェックしてください。
また、ログを確認してエラーメッセージを見つけます。
タイマーが実行されない
タイマーユニットファイルの設定を確認し、対応するサービスが存在していますか?
サービスが正常に動作することを確認しましょう。
また、タイマーの有効化を忘れていないか確認します。
まとめ
当記事では、systemdとsystemctlの基本的な概要や使い方を網羅的に紹介しました。
初心者にもわかりやすい内容で、実践的な知識を身につけられるはず。
Linuxシステム管理のスキルを向上させるために、ぜひ参考にしてください。