systemd のスピードと使いやすさは、最新の Linux システムを管理するための一般的な方法となっています。
バックグラウンドで実行されるアプリケーション、特定の時間にトリガーされるのを待っているスケジュールされたイベント、ログファイルに書き込まれるイベント、ステータスレポートの送信などです。昔は、さまざまなプロセスは、さまざまなUnixツールによって効果的に管理・監視することができました。しかし、現代のコンピューティングは、コンテナ化されたアプリケーションと同時に実行されるローカルサービス、クラウドとその上で実行されるクラスタへの容易なアクセス、リアルタイムプロセス、かつてないほど多くのデータなど、はるかに複雑になっています。
管理への統一されたアプローチを持つことは、ユーザーだけでなく、多忙なシステム管理者も切望することです。この重要なタスクを達成するために、(systemd) は開発され、すべての主要な Linux ディストリビューションですぐに採用されました。
もちろん、Linuxシステムを管理する方法はsystemdだけではありません。sysvinit、OpenRC、runit、s6、BusyBoxなど、他にも多くの初期化システムがあります。Linux を統一されたデータセットとして扱うということは、systemd が強力なツールと共に一貫した操作やクエリを実行できるということです。多忙なシステム管理者や多くのユーザーにとって、systemd のスピードと使いやすさは重要な特徴です。以下はその5つの理由です。
スタートアップの管理
Linuxコンピュータの起動は非常に稀な出来事です。サーバーのアップタイムは通常、数ヶ月や数週間ではなく、数時間で測定されます。ノートパソコンやデスクトップパソコンは、頻繁にシャットダウンしたり起動したりすることがありますが、ハングアップしたり休止状態になったりすることの方が多いのです。システムを監視したり問題を診断したりする場合、この瞬間に表示されるデータ量のサイズを制限することができるため、問題をすばやく見つけることができます。
コンピュータをいつ起動したか覚えていない場合、systemd のジャーナリングツール journalctl を使ってコンピュータの起動セッションを全てリストアップすることができます:
$ journalctl --list-boots
-42 7fe7c3... Fri - Wed
-... Wed - Fri
-1 e0fe5f... Mon - Mon
0 37fbe4... Tue - Tue
最近開始したセッションの出力は結果リストの一番下にあるので、出力をtailにパイプすることで最近開始したセッションを見ることができます。
左側の数字は、各起動セッションのインデックス番号です。つまり、特定の起動セッションのログを見たい場合は、このインデックス番号をパラメータとして使用します。
ログチェック
ログを見ることは、システムに関する情報を推測する重要な方法です。ログは、コンピュータの操作のほとんどのイベントの履歴を提供し、それらはあなたが直接監視しなくても生成されます。ログは、特定のサービスがいつ開始したか、時間指定されたタスクがいつ実行されたか、どのサービスがバックグラウンドで実行されたか、どのイベントが実行に失敗したか、などの情報を提供します。トラブルシューティングの最初のステップは systemd の journalctl を使ってログを見ることです:
$ journalctl --pager-end
-pager-endオプションはjournalctlの出力の最後からログを見始めるので、それ以前のログを見るには上にスクロールする必要があります。
systemd はエラーメッセージの "カタログ" を保持し、エラーログ、可能な解決方法、サポートフォーラムへのリンク、開発者のドキュメントを含んでいます。このエラーメッセージの "カタログ" は、ログに記録されたイベントの重要なコンテキストを提供します。エラーメッセージを説明のテキストと一緒にログに出力するには、 --catalog オプションを使います:
$ journalctl --pager-end --catalog
ログ出力をさらに限定するために、どのブートセッションのログを見るかを指定することができます。各ブートセッションはインデックス化されているので、 --boot オプションを使って特定のブートセッションを指定し、そのブートセッションだけのログを見ることができます:
$ journalctl --pager-end --catalog --boot 42
特定の systemd ユニットのログを表示することもできます。例えば、SSH サービスのトラブルシューティングを行うには、--unit sshd オプションを指定して、sshd デーモンに適用されるログのみを表示することができます:
$ journalctl --pager-end \
--catalog --boot 42 \
--unit sshd
サービス管理
systemd の最初のタスクはコンピュータを起動することで、systemd はこれを素早く、効率的かつ効果的に行います。しかし、systemd が常に管理する必要があるタスクはサービス管理です。systemd はセッション中に実行したいサービスが実際に起動し、実行され続けることを確認する必要があるからです。systemd はこの点で非常に堅牢で、クラッシュしたサービスでも理論的にはあなたの介入なしに再起動させることができます。
systemctl コマンドを使うと、systemd がサービスを管理し、.NET Framework を表示できるようになります:
$ systemctl cat sshd
# /usr/lib/systemd/system/sshd.service
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target
[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
ほとんどのユニット・ファイルは /usr/lib/systemd/system/ ディレクトリにありますが、以下を使用してローカルで設定を変更することもできます:
$ systemctl edit sshd
is-active 、特定のサービスが現在アクティブかどうかを確認できます:
$ systemctl is-active sshd
$ systemctl is-active foo
inactive
同様に、 is-failed オプションを使用して、特定のサービスの実行に失敗したかどうかを確認できます。
$ systemctl is-failed sshd
サービスを開始または停止するには、以下のコマンドを使用します:
$ systemctl stop sshd
$ systemctl start sshd
ブート時にサービスを開始させるには、以下のコマンドを使用します:
$ systemctl enable sshd
nowオプションを追加すると、起動時にサービスを開始し、現在のセッションで直ちにサービスを開始することができます。
タイマー管理
昔、Linuxでタスクを自動化したいときに使えたツールはcronでした。現在でもcronコマンドは使えますが、Linuxでタスクを自動化するための良い代替手段がいくつかあります。例えば、anacron コマンド 多機能なcronライクなシステムで、ダウンタイム中に見逃す可能性のあるタスクを実行することができます。
systemdはcronのような機能を持つ タイマー ツールを管理しています。以下のコマンドでアクティブなタイマーを一覧できます:
$ systemctl list-timers
NEXT LEFT
Tue NZDT 16min left [...]
Wed NZDT 11h left [...]
Wed NZDT 18h left [...]
3 timers listed.
Pass --all to see loaded but inactive timers, too.
以下のコマンドを使用すると、タイマーをサービスのように有効にすることができます:
$ systemctl enable myMonitor.timer
目標管理
は systemd の最後の主要コンポーネントです。サービスやタイマーと同じように、ターゲットは同じように起動したり有効にしたりできるユニットファイルです。ターゲットは他のユニットファイルと任意にグループ化できるという点でユニークです。例えば、グラフィカルデスクトップではなく、テキストコンソールインターフェースで起動したい場合、マルチユーザーターゲットがあります。しかし、マルチユーザーターゲットは、デスクトップのユニットファイルを含まない、単なるグラフィカルターゲットです。
つまり、ゴールとは、サービスやタイマー、あるいは他のゴールをまとめて、マシンの望ましい状態を表すシンプルな方法です。
実際、systemdでは、リブート、シャットダウン、シャットダウン操作は単なるターゲットです。
typeオプションでターゲットを限定すれば、 list-unit-files オプションで利用可能なすべてのターゲットをリストアップできます:
$ systemctl list-unit-files --type target
systemd を使ったコンピュータの制御と管理
最近のLinuxでは、サービス管理とログチェックにsystemdを使っています。個人の Linux システムから企業のサーバーまで、systemd は効果的なモニタリングを提供し、メンテナンスも非常に簡単です。systemd を頻繁に使えば使うほど、より予測可能で直感的なものになり、システムの様々な部分が互いにどのように関係しているかを理解できるようになります。




