systemdによるシステムサービスの管理
systemdを使ってLinuxサーバーを支える長時間稼働プログラムを管理します。サービスの起動、停止、有効化、状態確認、journalctlによるログの確認を行い、ユニットがプロセス管理にどう組み込まれるかを理解します。
「systemdによるシステムサービスの管理」はCoddyKit上の無料Linux Server Deployment & SSH Masteryレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLinux Server Deployment & SSH Mastery学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Linux Server Deployment & SSH Masteryコースには全4レッスンが含まれています。
サービスと通常のプロセス
これまでに、個々のプロセスとスケジュールされたタスクを管理しました。しかし、サーバーを構成するWebサーバー、データベース、SSHなどのプログラムはサービスとして実行されます。サービスとは、起動時に開始し、障害が発生した場合は再起動するバックグラウンドデーモンです。
最新のLinuxでは、サービスはシステムおよびサービスマネージャーであるsystemdによって管理されます。
systemdが管理するもの
systemdはすべてをユニットとして整理します。最も一般的な種類は.serviceユニットで、デーモンの実行方法を記述します。
systemctlコマンドは、これらのユニットを調査および制御するための主なインターフェースです。
systemctl --versionサービスの状態を確認する
systemctl statusは、サービスが実行中かどうか、メインプロセスのID、最近のログ行、起動時に有効化されているかどうかを表示します。
サービスのトラブルシューティングでは、通常これが最初に実行するコマンドです。
systemctl status nginxサービスを開始・停止する
start、stop、restartを使って、サービスの実行状態を制御します。これらは直ちに反映されますが、起動時の動作は変更しません。
接続を切断せずに設定を再読み込みできるサービスでは、reloadを使用してください。
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl stop nginx起動時にサービスを有効化する
enableを使うと、サーバーの起動時にサービスが自動的に開始されます。disableを使うと、起動時の対象から除外されます。これは、現在サービスが実行中かどうかとは無関係です。
便利な--nowフラグを使うと、有効化と開始を1つの手順で行えます。
sudo systemctl enable nginx
sudo systemctl enable --now nginx
sudo systemctl disable nginxサービスを一覧表示する
インストール済みで実行中のものを確認するには、ユニットファイルまたはアクティブなユニットを一覧表示します。
list-units --type=service— 現在読み込まれているサービスlist-unit-files --type=service— インストール済みのすべてのサービスと、その有効化状態
systemctl list-units --type=service --state=running
systemctl list-unit-files --type=servicejournalctlでログを読む
systemdはサービスの出力をジャーナルに保存します。journalctlで検索できます。
-u nginx— このサービスのみ-f— リアルタイムで追跡する-e—末尾に移動する
sudo journalctl -u nginx -f
sudo journalctl -u ssh --since '1 hour ago'ユニットファイルの構造
サービスはユニットファイルで定義されます。通常、/etc/systemd/system/または/lib/systemd/system/に配置されます。主なセクションは[Unit]、[Service]、[Install]の3つです。
ExecStart行は、systemdが実行するコマンドを指定します。
[Unit]
Description=My App
After=network.target
[Service]
ExecStart=/usr/bin/myapp --port 8080
Restart=on-failure
[Install]
WantedBy=multi-user.target独自のサービスを作成する
独自のプログラムをサービスとして実行するには、ユニットファイルを/etc/systemd/system/に配置し、新しいファイルを認識できるようsystemdを再読み込みしてから、有効化して開始します。
ユニットファイルを変更した後は、daemon-reloadが必要です。
sudo nano /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
sudo systemctl enable --now myapp障害発生時に自動再起動する
systemdの優れた機能の1つが自動復旧です。Restart=ディレクティブは、クラッシュしたサービスを再起動するよう指定します。
Restart=on-failure— ゼロ以外の終了コードの場合のみRestart=always— 停止するたびにRestartSec=5— 再試行前に待機する時間
[Service]
ExecStart=/usr/bin/myapp
Restart=always
RestartSec=5ベストプラクティス
自信を持ってサービスを管理するには、次の点に注意してください。
- 実行時の操作(
start)と起動時の設定(enable)を区別する - ユニットファイルを編集した後に
daemon-reloadを実行する - 分散したログファイルではなく、
journalctl -uを使ってデバッグする - 回復力を高めるため、独自アプリには
Restart=on-failureを追加する
クイックチェック
systemdに関する知識を確認しましょう。
まとめ
これで、systemdを使ってサーバーのサービスを管理できるようになりました。
status、start、stop、restart、reload- 起動時の動作を設定する
enable/disable - サービスログを確認する
journalctl -u - 回復力を高める
Restart=を指定した独自の.serviceユニットファイル
これで、長時間実行されるデーモンを含め、プロセスとタスクの管理スキルがさらに充実しました。
よくある質問
「systemdによるシステムサービスの管理」レッスンは無料ですか?
はい。「systemdによるシステムサービスの管理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Linux Server Deployment & SSH Masteryコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Linux Server Deployment & SSH Masteryコースには全4レッスンが含まれています。
「systemdによるシステムサービスの管理」で何を学びますか?
systemdを使ってLinuxサーバーを支える長時間稼働プログラムを管理します。サービスの起動、停止、有効化、状態確認、journalctlによるログの確認を行い、ユニットがプロセス管理にどう組み込まれるかを理解します。 ブラウザで直接実行するハンズオンコードでLinux Server Deployment & SSH Masteryを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Linux Server Deployment & SSH Masteryを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLinux Server Deployment & SSH Masteryは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「systemdによるシステムサービスの管理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLinux Server Deployment & SSH Masteryレッスンでコードを書いて実行できますか?
はい。すべてのLinux Server Deployment & SSH Masteryレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ユーザーとグループの管理
- システムプロセスの監視
- Cronによるスケジュールタスク
- systemdによるシステムサービスの管理