序章

近年、Linuxディストリビューションは他のinitシステムから systemd. The systemd ツールスイートは、起動以降のマシン全体を管理するための高速で柔軟なinitモデルを提供します。

このガイドでは、管理のために知っておく必要のある最も重要なコマンドを簡単に説明します。 systemd 有効なサーバー。 これらは、を実装するすべてのサーバーで機能するはずです systemd (Ubuntu 15.04、Debian 8、CentOS 7、Fedora 15以降のOSバージョン)。 始めましょう。

基本ユニット管理

その基本的なオブジェクト systemd 管理し、それに基づいて行動するのは「ユニット」です。 ユニットにはさまざまなタイプがありますが、最も一般的なタイプは「サービス」(で終わるユニットファイルで示されます)です。 .service). 上のサービスを管理するには systemd 有効なサーバー、私たちの主なツールは systemctl 指図。

通常のinitシステムコマンドはすべて、 systemctl 指図。 を使用します nginx.service デモンストレーションするユニット(このサービスファイルを取得するには、パッケージマネージャーとともにNginxをインストールする必要があります)。

たとえば、次のように入力してサービスを開始できます。

  1. sudo systemctl start nginx.service

次のように入力すると、再度停止できます。

  1. sudo systemctl stop nginx.service

サービスを再開するには、次のように入力します。

  1. sudo systemctl restart nginx.service

通常の機能を中断せずにサービスのリロードを試みるには、次のように入力します。

  1. sudo systemctl reload nginx.service

ユニットの有効化または無効化

デフォルトでは、ほとんど systemd ユニットファイルは起動時に自動的に開始されません。 この機能を構成するには、ユニットを「有効にする」必要があります。 これにより、特定のブート「ターゲット」に接続され、そのターゲットが開始されたときにトリガーされます。

起動時にサービスを自動的に開始できるようにするには、次のように入力します。

  1. sudo systemctl enable nginx.service

サービスを再度無効にする場合は、次のように入力します。

  1. sudo systemctl disable nginx.service

システム状態の概要を取得する

から引き出すことができる情報はたくさんあります systemd サーバーは、システム状態の概要を取得します。

たとえば、すべてのユニットファイルを取得するには systemd 「アクティブ」としてリストされている、タイプ(実際には省略できます list-units これがデフォルトであるため systemctl 行動):

  1. systemctl list-units

すべてのユニットを一覧表示するには systemd 現在アクティブでないものを含め、メモリにロードした、またはロードを試みた場合は、 --all スイッチ:

  1. systemctl list-units --all

システムにインストールされているすべてのユニットを一覧表示します。 systemd メモリにロードしようとしていません。次のように入力します。

  1. systemctl list-unit-files

基本的なログ情報の表示

A systemd と呼ばれるコンポーネント journald システムのすべての部分からジャーナルエントリを収集して管理します。 これは基本的に、アプリケーションとカーネルからのログ情報です。

最も古いエントリから始まるすべてのログエントリを表示するには、次のように入力します。

  1. journalctl

デフォルトでは、これにより、現在および以前のブートからのエントリが表示されます。 journald 以前のブートレコードを保存するように構成されています。 一部のディストリビューションはデフォルトでこれを有効にしますが、他のディストリビューションはこれを有効にしません(これを有効にするには、 /etc/systemd/journald.conf ファイルを設定し、 Storage= 「永続的」オプション、または「永続的」と入力して永続的ディレクトリを作成するオプション sudo mkdir -p /var/log/journal).

現在のブートからのジャーナルエントリのみを表示したい場合は、 -b 国旗:

  1. journalctl -b

通常は次のように表されるカーネルメッセージのみを表示する dmesg、あなたは使用することができます -k 国旗:

  1. journalctl -k

繰り返しますが、これを現在のブートにのみ制限するには、 -b 国旗:

  1. journalctl -k -b

ユニットの状態とログのクエリ

上記のコマンドを使用すると、一般的なシステム状態にアクセスできますが、個々のユニットの状態に関する情報を取得することもできます。

ユニットの現在の状態の概要を表示するには、 status オプションと systemctl 指図。 これにより、ユニットがアクティブであるかどうか、プロセスに関する情報、および最新のジャーナルエントリが表示されます。

  1. systemctl status nginx.service

問題のユニットのすべてのジャーナルエントリを表示するには、 -u ユニット名のオプション journalctl 指図:

  1. journalctl -u nginx.service

いつものように、エントリを現在のブートに制限するには、 -b 国旗:

  1. journalctl -b -u nginx.service

ユニットとユニットファイルの検査

これで、ユニットの状態を開始または停止して変更する方法と、状態およびジャーナル情報を表示してプロセスで何が起こっているかを把握する方法を理解しました。 ただし、ユニットおよびユニットファイルの他の側面を検査する方法はまだわかりません。

ユニットファイルには、次のパラメータが含まれています。 systemd ユニットの管理と実行に使用します。 ユニットファイルの全内容を表示するには、次のように入力します。

  1. systemctl cat nginx.service

ユニット(どのユニット)の依存関係ツリーを表示するには systemd ユニットの起動時にアクティブ化を試みます)、次のように入力します。

  1. systemctl list-dependencies nginx.service

これにより、従属単位が表示されます。 target ユニットは再帰的に拡張されました。 すべての依存ユニットを再帰的に拡張するには、 --all 国旗:

  1. systemctl list-dependencies --all nginx.service

最後に、システム上のユニットの設定の低レベルの詳細を確認するには、 show オプション:

  1. systemctl show nginx.service

これにより、管理されている各パラメータの値がわかります systemd.

ユニットファイルの変更

ユニットファイルに変更を加える必要がある場合は、 systemd から変更を加えることができます systemctl 実際のディスクの場所に移動する必要がないように、コマンド自体を実行します。

デフォルトのユニットファイルの設定を追加または上書きするために使用できるユニットファイルスニペットを追加するには、単に edit ユニットのオプション:

  1. sudo systemctl edit nginx.service

スニペットを作成するのではなく、ユニットファイルのコンテンツ全体を変更する場合は、 --full 国旗:

  1. sudo systemctl edit --full nginx.service

ユニットファイルを変更した後、リロードする必要があります systemd 自分自身を処理して変更を取得します。

  1. sudo systemctl daemon-reload

ターゲットの使用(ランレベル)

initシステムのもう1つの機能は、サーバー自体を異なる状態間で遷移させることです。 従来のinitシステムは通常、これらを「ランレベル」と呼び、システムが一度に1つのランレベルにのみ存在できるようにします。

systemd、代わりに「ターゲット」が使用されます。 ターゲットは基本的に、サーバーを特定の状態にするためにサーバーが使用できる同期ポイントです。 サービスおよびその他のユニットファイルをターゲットに関連付けることができ、複数のターゲットを同時にアクティブにすることができます。

システムで使用可能なすべてのターゲットを表示するには、次のように入力します。

  1. systemctl list-unit-files --type=target

デフォルトのターゲットを表示するには systemd 起動時に到達しようとします(これにより、そのターゲットの依存関係ツリーを構成するすべてのユニットファイルが起動します)、次のように入力します。

  1. systemctl get-default

を使用して、起動時に使用されるデフォルトのターゲットを変更できます。 set-default オプション:

  1. sudo systemctl set-default multi-user.target

ターゲットに関連付けられているユニットを確認するには、次のように入力します。

  1. systemctl list-dependencies multi-user.target

システム状態を変更して、ターゲット間を移行することができます。 isolate オプション。 これにより、指定されたターゲットに関連付けられていないユニットが停止します。 分離しているターゲットが重要なサービスを停止しないことを確認してください。

  1. sudo systemctl isolate multi-user.target

サーバーの停止または再起動

システムが移行できる主要な状態のいくつかについては、ショートカットを使用できます。 たとえば、サーバーの電源をオフにするには、次のように入力します。

  1. sudo systemctl poweroff

代わりにシステムを再起動する場合は、次のように入力します。

  1. sudo systemctl reboot

次のように入力すると、レスキューモードで起動できます。

  1. sudo systemctl rescue

ほとんどのオペレーティングシステムには、これらの操作の従来のエイリアスが含まれているため、簡単に入力できます。 sudo poweroff また sudo reboot なしで systemctl. ただし、これがすべてのシステムで設定されるとは限りません。

次のステップ

これで、を使用するサーバーを管理する方法の基本を理解する必要があります systemd. ただし、ニーズが拡大するにつれて、学ぶべきことがたくさんあります。 以下は、このガイドで説明したいくつかのコンポーネントに関するより詳細な情報が記載されたガイドへのリンクです。

initシステムの長所を活用する方法を学ぶことで、マシンの状態を制御し、サービスとプロセスをより簡単に管理できます。