Systemd 入門(mén)ガイド:実踐編 一、起動(dòng)します 二、サービス開(kāi)始 三、サービス停止 ④ 設定ファイルを読み解く 五、[ユニット] ブロック:起動(dòng)順と依存関係。 6. サービスブロック:アクション開(kāi)始 6.1 啟動(dòng)コマンド 6.2 起動(dòng)種類(lèi) 6.3 リスタート動(dòng)作 7. [インストール] ブロック 第8章:Targetの設定ファイル 9、設定ファイルを変更後、再起動(dòng)してください。 文書(shū)情報
著(zhù)者: 阮一峰:阮一峰(阮一峰)
前回の記事では、Systemdを紹介しました。
主なコマンド
今日は、それを使って基本的なタスクを完了する方法をお伝えします。
Systemdをサポートするソフトウェアでは、インストール時(shí)に自動(dòng)的に
/usr/lib/systemd/system
カタログに設定ファイルを追加してください。このソフトウェアを起動(dòng)時(shí)に自動(dòng)的に起動(dòng)させる場(chǎng)合は、以下のコマンドを実行してください(以下の通り)。
httpd.service
(例)
$ sudo systemctl enable httpd
上記のコマンドは、以下の意味に相當します。
/etc/systemd/system
カタログにシンボリックリンクを追加して、指す
/usr/lib/systemd/system
中に入ってる
httpd.service
ファイル。これは、起動(dòng)時(shí)に、
Systemd
ただ実行する
/etc/systemd/system
「目次內の設定ファイル。これは、変更した設定ファイルをそのフォルダに配置すれば、元の設定を上書(shū)きできるという意味です?!?
起動(dòng)設定後に、ソフトウェアはすぐに起動(dòng)しません。次回起動(dòng)まで待つ必要があります。今すぐにこのソフトウェアを実行したい場(chǎng)合は、以下の手順を実行してください。
systemctl
start
命令。起動(dòng)後すぐにはソフトウェアが立ち上がりません。次回起動(dòng)まで待つ必要があります。今すぐに実行したい場(chǎng)合は、次の操作を行います。
systemctl start
命令です。
x
$ sudo systemctl start httpd
コマンドを実行した後、起動(dòng)失敗する可能性がありますので、使用してください
systemctl
status
サービスの狀態(tài)を確認してください。
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行:設定ファイルの場(chǎng)所、起動(dòng)時(shí)に設定するかどうか Active行:実行中 Main PID行:メインプロセスID Status行:アプリケーション(ここではhttpd)が提供するソフトウェアの現在の狀態(tài) CGroupブロック:アプリケーションの全てのサブプロセス ログブロック:アプリケーションのログ
サービスを停止させるには、以下の操作を行います。
systemctl stop
命令です。
xxxxxxxxxx
$ sudo systemctl stop httpd.service
有時(shí)候,該命令可能沒(méi)有響應,服務(wù)停不下來(lái)。這時(shí)候就不得不"殺進(jìn)程"了,向正在運行的進(jìn)程發(fā)出
kill
信號?!?信號(しんごう)
xxxxxxxxxx
$ sudo systemctl kill httpd.service
それに、サービスの再起動(dòng)は以下のように実行します
systemctl restart
命令です。
x
$ sudo systemctl restart httpd.service
サービスの起動(dòng)方法は、設定ファイルによって決定されます。以下に、設定ファイルの內容を見(jiàn)てみましょう。
前述のように、設定ファイルは主に
/usr/lib/systemd/system
目次、もしくは
/etc/systemd/system
目次。設定ファイルを見(jiàn)つけたら、テキストエディタで開(kāi)いてください。
systemctl
cat
コマンドは設定ファイルを確認するために使われます。以下では、
sshd.service
ファイルを例に、SSHサーバーを起動(dòng)し、他のユーザーが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
現在のサービスの簡(jiǎn)単な説明を提供してください。
Documentation
フィールドはドキュメントの位置を示します。次の設定は、起動(dòng)順序と依存関係で、非常に重要です。
After
フィールド:表示する場(chǎng)合network.target
「または」sshd-keygen.service
それを起動(dòng)する必要がありますね。sshd.service
それらの後に始めるべきです。
それに、もう一つあります。
Before
フィールド、定義
sshd.service
どのサービスの前に起動(dòng)すべきか。注意、
After
「わ」
Before
フィールドは起動(dòng)順序のみに関連し、依存関係には関係ありません。
例えば、あるWebアプリケーションはPostgreSQLデータベースでデータを保存する必要があります。設定ファイルでは、PostgreSQLの後に起動(dòng)するように定義されていますが、依存関係として定義されていません。リリース後、何らかの理由でPostgreSQLが再起動(dòng)する必要があり、サービス停止中にWebアプリケーションはデータベース接続を確立できません。依存関係を設定
Wants
フィールドと
Requires
フィールド。
Wants
フィールド:表現sshd.service
「とともに」sshd-keygen.service
之間存在"弱依賴(lài)"關(guān)系,即如果"sshd-keygen.service"啟動(dòng)失敗或停止運行,不影響sshd.service
続行します。
Requires
字段則表示"強依賴(lài)"關(guān)系,即如果該服務(wù)啟動(dòng)失敗或異常退出,那么
sshd.service
も辭退する必要もあります。
注意してください。
Wants
フィールドと
Requires
フィールドは依存関係のみに関連し、起動(dòng)順序には関係ありません。デフォルトでは同時(shí)に起動(dòng)します。
Service
ブロック定義で現在のサービスを起動(dòng)する方法を示します。
多くのソフトウェアには、環(huán)境パラメータファイルがあり、それを使って
EnvironmentFile
フィールド読み込み。
EnvironmentFile
フィールド:現在のサービスの環(huán)境パラメータファイルを指定します。そのファイル內のkey=value
キーペア、使える$key
の形式、現在の設定ファイルから取得します。
上記の例では、sshdの環(huán)境設定ファイルは
/etc/sysconfig/sshd
最も重要なフィールドは、設定ファイル內です。
ExecStart
。
ExecStart
フィールド:プロセスを起動(dòng)する際に実行するコマンドの定義。
上の例では、起動(dòng)
sshd
実行したコマンドは:
/usr/sbin/sshd -D
$OPTIONS
その中の変數
$OPTIONS
來(lái)自:出身、來(lái)る(から)
EnvironmentFile
指定の環(huán)境パラメータファイル。同様の機能を持つ以下のフィールドがあります。
ExecReload
フィールド:サービス再起動(dòng)時(shí)の実行コマンド
ExecStop
フィールド:サービス停止時(shí)に実行されるコマンド
ExecStartPre
サービス開(kāi)始前に実行するコマンド:サービス開(kāi)始前のコマンド
ExecStartPost
フィールド:サービス開(kāi)始後の実行コマンド
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
すべての起動(dòng)設定の前に、連続線(xiàn)(-)を加えることができます。
-
),表示"抑制錯誤",即發(fā)生錯誤的時(shí)候,不影響其他命令的執行。比如,
EnvironmentFile=-/etc/sysconfig/sshd
(注意等號の後の短剛號が)、「~と、即ち、」と表します。
/etc/sysconfig/sshd
ファイルは存在せず、エラーも発生しません。
Type
フィールドの定義を起動(dòng)タイプに。設定できる値は以下の通りです。
シンプル(デフォルト値):
ExecStart
フィールドで起動(dòng)するプロセスはメインプロセスです。forking:
ExecStart
フィールドはfork()
方式起動(dòng)時(shí)、親プロセスは終了し、子プロセスがメインプロセスになる。ワンショット:似ている
simple
しかし、一度のみ実行され、Systemdはそれが終了するまで他のサービスの起動(dòng)を待ちます。DBus:似ている
simple
D-Bus信號を受け取ってから起動(dòng)します。通知:似たような
simple
起動(dòng)が完了すると通知シグナルが送信され、その後Systemdが他のサービスを起動(dòng)します。遊休の:類(lèi)似する
simple
しかし、他のタスクが終わるまでそのサービスは開(kāi)始されません。そのサービスの出力が他のサービスの出力と混ざらないようにするための使用例があります。
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
?
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off
?
[Install]
WantedBy=multi-user.target
上の設定ファイル、起動(dòng)種類(lèi)を設定して
oneshot
このサービスは一度実行すれば十分で、長(cháng)期にわたって実行する必要はありません。もし、將來(lái)的に再び開(kāi)きたい場(chǎng)合は、設定ファイルを以下のように変更してください。
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
指定のコマンドを実行し、タッチパッドを再起動(dòng)します。
Service
ブロックには再起動(dòng)行動(dòng)を定義するフィールドがあります。
KillMode
フィールド:Systemdでsshdサービスを停止する方法を定義。
上記の例では、
KillMode
設定します。
process
主プロセスのみ停止し、sshdのサブプロセスは停止しない、つまりサブプロセスで開(kāi)かれたSSHセッションは維持される。この設定はあまり一般的ではないが、sshdには重要で、サービスを停止した際に自分が開(kāi)いたSSHセッションも一緒に強制終了されることがない。
KillMode
フィールドで設定できる値は以下の通りです。
control-group(デフォルト):現在の制御グループ內のすべてのサブプロセスが終了されます
簡(jiǎn)潔:プロセス:メインプロセスのみ削除
親プロセスはSIGTERMシグナルを受け取り、子プロセスはSIGKILLシグナルを受け取ります。
:プロセスは削除されず、サービスの停止コマンドを実行だけです。
次には
Restart
フィールド。
Restart
フィールド:sshdが終了した後、Systemdの再起動(dòng)方法を定義。
上の例では、
Restart
設定します。
on-failure
予期せぬ失敗が発生した場(chǎng)合、sshdを再起動(dòng)します。sshdが通常で終了した場(chǎng)合(例えば実行
systemctl
stop
(命令),再起動(dòng)しない。
Restart
フィールドで設定できる値は以下の通りです。
no(デフォルト):終了後、再起動(dòng)しない
on-success:正常終了時(shí)(終了コードが0)のみ再起動(dòng)
on-failure:異常終了時(shí)(終了コードが0でない場(chǎng)合)、シグナルによる終了やタイムアウトを含め、再起動(dòng)します。
on-abnormal:シグナルで終了またはタイムアウトしたときのみ再起動(dòng)
on-abort:未捕獲信號で終了した場(chǎng)合のみ再起動(dòng)
on-watchdog:タイムアウトで終了し、再起動(dòng)
どんな理由で辭めたとしても、いつも再開(kāi)です。
ダムプロセスについては、以下のように設定することをお勧めします:
on-failure
エラーログアウトを許可するサービスには、設定可能です。
on-abnormal
。
最後に
RestartSec
フィールド。
RestartSec
フィールド:Systemdがサービスを再起動(dòng)する前に待つ必要のある秒數を表します。上の例では42秒の待機時(shí)間が設定されています。
Install
ブロック、この設定ファイルのインストール方法、つまり起動(dòng)時(shí)の自動(dòng)実行方法の定義です。
WantedBy
フィールド:サービスの対象となるターゲットを示します。
Target
の意味はサービスグループで、サービスのセットを指します。
WantedBy=multi-user.target
これは、sshdが所在するターゲットを指しています。
multi-user.target
この設定は非常に重要です、なぜなら実行…
systemctl
enable sshd.service
命令の際、
sshd.service
のシンボリックリンクは、置かれるでしょう。
/etc/systemd/system
目次の下に
multi-user.target.wants
サブディレクトリ內で、Systemdにはデフォルトの起動(dòng)ターゲットがあります。
xxxxxxxxxx
$ systemctl get-default
multi-user.target
上記の結果は、デフォルトの起動(dòng)ターゲットは
multi-user.target
このグループの全サービスは起動(dòng)時(shí)に開(kāi)始されます。そのためです。
systemctl
enable
コマンドが起動(dòng)時(shí)の自動(dòng)起動(dòng)を設定できる理由は、ターゲットを使うとき、
systemctl
list-dependencies
命令と
systemctl isolate
コマンドも役立ちます。
xxxxxxxxxx
# multi-user.targetに含まれるすべてのサービスを確認する
$ systemctl list-dependencies multi-user.target
?
別のターゲットに切り替え
# shutdown.target がシャットダウン狀態(tài)です
$ sudo systemctl isolate shutdown.target
一般的には、一般的に使用されるターゲットは二つあります:一つは
multi-user.target
,マルチユーザーコマンドラインの狀態(tài)を示す;もう一個(gè)是
graphical.target
GUI狀態(tài)を表すもので、依存しています。
multi-user.target
公式文書(shū)には非常に鮮明な畫(huà)像があります。
ターゲット依存関係図
。
ターゲットにも設定ファイルがあります。
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設定ファイルには起動(dòng)コマンドがありません。上記の結果では、主要なフィールドの意味は以下の通りです。
Requires
フィールド:要求basic.target
一緒に動(dòng)く。
Conflicts
フィールド:衝突フィールド。もしrescue.service
「または」rescue.target
動(dòng)作中multi-user.target
動(dòng)かない、逆も然り。
After
:表記しますmulti-user.target
在 (さい)basic.target
、rescue.service
、rescue.target
後に起動(dòng)します。それがあれば。
AllowIsolate
許可しますsystemctl isolate
コマンド切換えmulti-user.target
。
設定ファイルを修正後、設定ファイルを再読み込みし、関連サービスを再起動(dòng)する必要があります。
x
# 設定ファイルを再読み込み
$ sudo systemctl daemon-reload
?
サービス再起動(dòng)関連
$ sudo systemctl restart foobar
(終了)
著(zhù)作権表示:自由転載-非商業(yè)用途-非派生作品-著(zhù)者名保持 クリエイティブ?シェア3.0 ライセンス )
発行日:2016年3月8日
最近使用した: