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 httpdhttpd.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 -DFOREGROUND12月 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 daemonDocumentation=man:sshd(8) man:sshd_config(5)After=network.target sshd-keygen.serviceWants=sshd-keygen.service[Service]EnvironmentFile=/etc/sysconfig/sshdExecStart=/usr/sbin/sshd -D $OPTIONSExecReload=/bin/kill -HUP $MAINPIDType=simpleKillMode=processRestart=on-failureRestartSec=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 execstart1ExecStart=ExecStart=/bin/echo execstart2ExecStartPost=/bin/echo post1ExecStartPost=/bin/echo post2
上記の設定ファイル、2行目
ExecStart
空値に設定すると、第1行の設定がキャンセルされます。実行結果は以下の通りです。
xxxxxxxxxxexecstart2post1post2
すべての起動設定の前に、連続線(-)を加えることができます。
-
),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,
EnvironmentFile=-/etc/sysconfig/sshd
(注意等号の後の短剛号が)、「~と、即ち、」と表します。
/etc/sysconfig/sshd
ファイルは存在せず、エラーも発生しません。
Type
フィールドの定義を起動タイプに。設定できる値は以下の通りです。
シンプル(デフォルト値):
ExecStartフィールドで起動するプロセスはメインプロセスです。forking:
ExecStartフィールドはfork()方式起動時、親プロセスは終了し、子プロセスがメインプロセスになる。ワンショット:似ている
simpleしかし、一度のみ実行され、Systemdはそれが終了するまで他のサービスの起動を待ちます。DBus:似ている
simpleD-Bus信号を受け取ってから起動します。通知:似たような
simple起動が完了すると通知シグナルが送信され、その後Systemdが他のサービスを起動します。遊休の:類似する
simpleしかし、他のタスクが終わるまでそのサービスは開始されません。そのサービスの出力が他のサービスの出力と混ざらないようにするための使用例があります。
xxxxxxxxxx[Unit]Description=Switch-off Touchpad[Service]Type=oneshotExecStart=/usr/bin/touchpad-off[Install]WantedBy=multi-user.target
上の設定ファイル、起動種類を設定して
oneshot
このサービスは一度実行すれば十分で、長期にわたって実行する必要はありません。もし、将来的に再び開きたい場合は、設定ファイルを以下のように変更してください。
xxxxxxxxxx[Unit]Description=Switch-off Touchpad[Service]Type=oneshotExecStart=/usr/bin/touchpad-off startExecStop=/usr/bin/touchpad-off stopRemainAfterExit=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-defaultmulti-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 SystemDocumentation=man:systemd.special(7)Requires=basic.targetConflicts=rescue.service rescue.targetAfter=basic.target rescue.service rescue.targetAllowIsolate=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日
最近使用した: