Systemd 入門ガイド:実践編 一、起動します 二、サービス開始 三、サービス停止 ④ 設定ファイルを読み解く 五、[ユニット] ブロック:起動順と依存関係。 6. サービスブロック:アクション開始 6.1 启動コマンド 6.2 起動種類 6.3 リスタート動作 7. [インストール] ブロック 第8章:Targetの設定ファイル 9、設定ファイルを変更後、再起動してください。 文書情報
著者: 阮一峰:阮一峰(阮一峰)
前回の記事では、Systemdを紹介しました。 主なコマンド 今日は、それを使って基本的なタスクを完了する方法をお伝えします。
Systemdをサポートするソフトウェアでは、インストール時に自動的に
/usr/lib/systemd/system
カタログに設定ファイルを追加してください。このソフトウェアを起動時に自動的に起動させる場合は、以下のコマンドを実行してください(以下の通り)。
httpd.service
(例)
$ sudo systemctl enable httpd
上記のコマンドは、以下の意味に相当します。
/etc/systemd/system
カタログにシンボリックリンクを追加して、指す
/usr/lib/systemd/system
中に入ってる
httpd.service
ファイル。これは、起動時に、
Systemd
ただ実行する
/etc/systemd/system
「目次内の設定ファイル。これは、変更した設定ファイルをそのフォルダに配置すれば、元の設定を上書きできるという意味です。」
起動設定後に、ソフトウェアはすぐに起動しません。次回起動まで待つ必要があります。今すぐにこのソフトウェアを実行したい場合は、以下の手順を実行してください。
systemctl
start
命令。起動後すぐにはソフトウェアが立ち上がりません。次回起動まで待つ必要があります。今すぐに実行したい場合は、次の操作を行います。
systemctl start
命令です。
x
$ sudo systemctl start httpd
コマンドを実行した後、起動失敗する可能性がありますので、使用してください
systemctl
status
サービスの状態を確認してください。
x
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since 金 2014-12-05 12:18:22 JST; 7min ago
Main PID: 4349 (httpd)
Status: "Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4349 /usr/sbin/httpd -DFOREGROUND
├─4350 /usr/sbin/httpd -DFOREGROUND
├─4351 /usr/sbin/httpd -DFOREGROUND
├─4352 /usr/sbin/httpd -DFOREGROUND
├─4353 /usr/sbin/httpd -DFOREGROUND
└─4354 /usr/sbin/httpd -DFOREGROUND
12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
上記の出力結果の意味は以下の通りです。
Loaded行:設定ファイルの場所、起動時に設定するかどうか Active行:実行中 Main PID行:メインプロセスID Status行:アプリケーション(ここではhttpd)が提供するソフトウェアの現在の状態 CGroupブロック:アプリケーションの全てのサブプロセス ログブロック:アプリケーションのログ
サービスを停止させるには、以下の操作を行います。
systemctl stop
命令です。
xxxxxxxxxx
$ sudo systemctl stop httpd.service
有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出
kill
信号。→ 信号(しんごう)
xxxxxxxxxx
$ sudo systemctl kill httpd.service
それに、サービスの再起動は以下のように実行します
systemctl restart
命令です。
x
$ sudo systemctl restart httpd.service
サービスの起動方法は、設定ファイルによって決定されます。以下に、設定ファイルの内容を見てみましょう。
前述のように、設定ファイルは主に
/usr/lib/systemd/system
目次、もしくは
/etc/systemd/system
目次。設定ファイルを見つけたら、テキストエディタで開いてください。
systemctl
cat
コマンドは設定ファイルを確認するために使われます。以下では、
sshd.service
ファイルを例に、SSHサーバーを起動し、他のユーザーがSSHでログインできるようにします。
xxxxxxxxxx
$ systemctl cat sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
Type=simple
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
ファイルはいくつかのブロックに分かれており、各ブロックにはいくつかのキーペアがあります。
以下に各ブロックの内容を順に説明します。
Unit
ブロックの
Description
現在のサービスの簡単な説明を提供してください。
Documentation
フィールドはドキュメントの位置を示します。次の設定は、起動順序と依存関係で、非常に重要です。
After
フィールド:表示する場合network.target
「または」sshd-keygen.service
それを起動する必要がありますね。sshd.service
それらの後に始めるべきです。
それに、もう一つあります。
Before
フィールド、定義
sshd.service
どのサービスの前に起動すべきか。注意、
After
「わ」
Before
フィールドは起動順序のみに関連し、依存関係には関係ありません。
例えば、あるWebアプリケーションはPostgreSQLデータベースでデータを保存する必要があります。設定ファイルでは、PostgreSQLの後に起動するように定義されていますが、依存関係として定義されていません。リリース後、何らかの理由でPostgreSQLが再起動する必要があり、サービス停止中にWebアプリケーションはデータベース接続を確立できません。依存関係を設定
Wants
フィールドと
Requires
フィールド。
Wants
フィールド:表現sshd.service
「とともに」sshd-keygen.service
之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响sshd.service
続行します。
Requires
字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么
sshd.service
も辞退する必要もあります。
注意してください。
Wants
フィールドと
Requires
フィールドは依存関係のみに関連し、起動順序には関係ありません。デフォルトでは同時に起動します。
Service
ブロック定義で現在のサービスを起動する方法を示します。
多くのソフトウェアには、環境パラメータファイルがあり、それを使って
EnvironmentFile
フィールド読み込み。
EnvironmentFile
フィールド:現在のサービスの環境パラメータファイルを指定します。そのファイル内のkey=value
キーペア、使える$key
の形式、現在の設定ファイルから取得します。
上記の例では、sshdの環境設定ファイルは
/etc/sysconfig/sshd
最も重要なフィールドは、設定ファイル内です。
ExecStart
。
ExecStart
フィールド:プロセスを起動する際に実行するコマンドの定義。
上の例では、起動
sshd
実行したコマンドは:
/usr/sbin/sshd -D
$OPTIONS
その中の変数
$OPTIONS
来自:出身、来る(から)
EnvironmentFile
指定の環境パラメータファイル。同様の機能を持つ以下のフィールドがあります。
ExecReload
フィールド:サービス再起動時の実行コマンド
ExecStop
フィールド:サービス停止時に実行されるコマンド
ExecStartPre
サービス開始前に実行するコマンド:サービス開始前のコマンド
ExecStartPost
フィールド:サービス開始後の実行コマンド
ExecStopPost
フィールド:サービス停止後に実行するコマンド
以下の例をご覧ください。
xxxxxxxxxx
[Service]
ExecStart=/bin/echo execstart1
ExecStart=
ExecStart=/bin/echo execstart2
ExecStartPost=/bin/echo post1
ExecStartPost=/bin/echo post2
上記の設定ファイル、2行目
ExecStart
空値に設定すると、第1行の設定がキャンセルされます。実行結果は以下の通りです。
xxxxxxxxxx
execstart2
post1
post2
すべての起動設定の前に、連続線(-)を加えることができます。
-
),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,
EnvironmentFile=-/etc/sysconfig/sshd
(注意等号の後の短剛号が)、「~と、即ち、」と表します。
/etc/sysconfig/sshd
ファイルは存在せず、エラーも発生しません。
Type
フィールドの定義を起動タイプに。設定できる値は以下の通りです。
シンプル(デフォルト値):
ExecStart
フィールドで起動するプロセスはメインプロセスです。forking:
ExecStart
フィールドはfork()
方式起動時、親プロセスは終了し、子プロセスがメインプロセスになる。ワンショット:似ている
simple
しかし、一度のみ実行され、Systemdはそれが終了するまで他のサービスの起動を待ちます。DBus:似ている
simple
D-Bus信号を受け取ってから起動します。通知:似たような
simple
起動が完了すると通知シグナルが送信され、その後Systemdが他のサービスを起動します。遊休の:類似する
simple
しかし、他のタスクが終わるまでそのサービスは開始されません。そのサービスの出力が他のサービスの出力と混ざらないようにするための使用例があります。
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off
[Install]
WantedBy=multi-user.target
上の設定ファイル、起動種類を設定して
oneshot
このサービスは一度実行すれば十分で、長期にわたって実行する必要はありません。もし、将来的に再び開きたい場合は、設定ファイルを以下のように変更してください。
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off start
ExecStop=/usr/bin/touchpad-off stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
上記の設定ファイル中、
RemainAfterExit
フィールドを設定します
yes
プロセスが終了しても、サービスは継続して実行されます。そのため、一旦使用すると、
systemctl
stop
サービスを停止させろ。
ExecStop
指定のコマンドを実行し、タッチパッドを再起動します。
Service
ブロックには再起動行動を定義するフィールドがあります。
KillMode
フィールド:Systemdでsshdサービスを停止する方法を定義。
上記の例では、
KillMode
設定します。
process
主プロセスのみ停止し、sshdのサブプロセスは停止しない、つまりサブプロセスで開かれたSSHセッションは維持される。この設定はあまり一般的ではないが、sshdには重要で、サービスを停止した際に自分が開いたSSHセッションも一緒に強制終了されることがない。
KillMode
フィールドで設定できる値は以下の通りです。
control-group(デフォルト):現在の制御グループ内のすべてのサブプロセスが終了されます
简洁:プロセス:メインプロセスのみ削除
親プロセスはSIGTERMシグナルを受け取り、子プロセスはSIGKILLシグナルを受け取ります。
:プロセスは削除されず、サービスの停止コマンドを実行だけです。
次には
Restart
フィールド。
Restart
フィールド:sshdが終了した後、Systemdの再起動方法を定義。
上の例では、
Restart
設定します。
on-failure
予期せぬ失敗が発生した場合、sshdを再起動します。sshdが通常で終了した場合(例えば実行
systemctl
stop
(命令),再起動しない。
Restart
フィールドで設定できる値は以下の通りです。
no(デフォルト):終了後、再起動しない
on-success:正常終了時(終了コードが0)のみ再起動
on-failure:異常終了時(終了コードが0でない場合)、シグナルによる終了やタイムアウトを含め、再起動します。
on-abnormal:シグナルで終了またはタイムアウトしたときのみ再起動
on-abort:未捕獲信号で終了した場合のみ再起動
on-watchdog:タイムアウトで終了し、再起動
どんな理由で辞めたとしても、いつも再開です。
ダムプロセスについては、以下のように設定することをお勧めします:
on-failure
エラーログアウトを許可するサービスには、設定可能です。
on-abnormal
。
最後に
RestartSec
フィールド。
RestartSec
フィールド:Systemdがサービスを再起動する前に待つ必要のある秒数を表します。上の例では42秒の待機時間が設定されています。
Install
ブロック、この設定ファイルのインストール方法、つまり起動時の自動実行方法の定義です。
WantedBy
フィールド:サービスの対象となるターゲットを示します。
Target
の意味はサービスグループで、サービスのセットを指します。
WantedBy=multi-user.target
これは、sshdが所在するターゲットを指しています。
multi-user.target
この設定は非常に重要です、なぜなら実行…
systemctl
enable sshd.service
命令の際、
sshd.service
のシンボリックリンクは、置かれるでしょう。
/etc/systemd/system
目次の下に
multi-user.target.wants
サブディレクトリ内で、Systemdにはデフォルトの起動ターゲットがあります。
xxxxxxxxxx
$ systemctl get-default
multi-user.target
上記の結果は、デフォルトの起動ターゲットは
multi-user.target
このグループの全サービスは起動時に開始されます。そのためです。
systemctl
enable
コマンドが起動時の自動起動を設定できる理由は、ターゲットを使うとき、
systemctl
list-dependencies
命令と
systemctl isolate
コマンドも役立ちます。
xxxxxxxxxx
# multi-user.targetに含まれるすべてのサービスを確認する
$ systemctl list-dependencies multi-user.target
別のターゲットに切り替え
# shutdown.target がシャットダウン状態です
$ sudo systemctl isolate shutdown.target
一般的には、一般的に使用されるターゲットは二つあります:一つは
multi-user.target
,マルチユーザーコマンドラインの状態を示す;もう一个是
graphical.target
GUI状態を表すもので、依存しています。
multi-user.target
公式文書には非常に鮮明な画像があります。
ターゲット依存関係図
。
ターゲットにも設定ファイルがあります。
xxxxxxxxxx
$ systemctl cat multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
注意:Target設定ファイルには起動コマンドがありません。上記の結果では、主要なフィールドの意味は以下の通りです。
Requires
フィールド:要求basic.target
一緒に動く。
Conflicts
フィールド:衝突フィールド。もしrescue.service
「または」rescue.target
動作中multi-user.target
動かない、逆も然り。
After
:表記しますmulti-user.target
在 (さい)basic.target
、rescue.service
、rescue.target
後に起動します。それがあれば。
AllowIsolate
許可しますsystemctl isolate
コマンド切換えmulti-user.target
。
設定ファイルを修正後、設定ファイルを再読み込みし、関連サービスを再起動する必要があります。
x
# 設定ファイルを再読み込み
$ sudo systemctl daemon-reload
サービス再起動関連
$ sudo systemctl restart foobar
(終了)
著作権表示:自由転載-非商業用途-非派生作品-著者名保持 クリエイティブ・シェア3.0 ライセンス )
発行日:2016年3月8日
最近使用した: