0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

systemdおためし

Posted at

systemd

コマンド一覧

コマンド 説明
systemd-analyze plot SVG 形式で起動時 unitの開始・終了を図にする
systemd --test --system unit や設定を読んで実行 job を計算する
systemctl get-default デフォルトターゲット確認
systemctl list-dependencies 依存unit一覧を出力
systemctl daemon-reload ユニットファイルリロード
systemctl status [unit] unitの状態確認
systemctl show [unit] unitパラメータ確認
systemctl list-units ユニット一覧
systemctl list-unit-files ユニットファイル一覧
systemctl cat [unit] ユニットファイルの内容出力

コマンド例

systemd-analyze plot

$ systemd-analyze plot > plot.html

prot.htmlをブラウザで開くと図が表示される

enable / disable

$ systemctl enable [service]
$ systemctl disable [service]

prot.htmlをブラウザで開くと図が表示される

systemctl list-dependencies

$ systemctl list-dependencies multi-user.target
$ systemctl list-dependencies multi-user.target -a
$ systemctl list-dependencies multi-user.target --after
$ systemctl list-dependencies multi-user.target --before

注意したいのはこのコマンドで表示されるツリーは「起動順序」は示していないこと。
必要とされるunitを示しているだけ。
-a サービスが依存しているユニットも表示
--after/--before 依存関係を表示

systemctl daemon-reload

systemdはunitファイルを読み込みメモリ上にunitを作成する

$ systemctl daemon-reload

unit file定義

service基本フロー

上から順に実行されていく。failの場合はExecStopPostが実行され終了する
ExecStartPre
ExecStart
ExecStartPost
ExecStop(正常終了の場合のみ)
ExecStopPost
ExecReload(リロード)

After Requires

After=はサービスの順序を設定し、Requires=は依存関係を示します。順序を指定しない場合、依存するサービスと同時に依存するサービスが開始されます。
Requiresは必要とするものを指定する。必要なので必ずアクティブになっている。Requiresを指定してAfterを指定していない場合は最終的にどちらも起動すればよいので、順序は補償されない。だから必ず指定すること。
Wantsはほしいものを指定する。(してほしい、されてほしい)なので必ずアクティブになっているとは限らない

RequiredBy

指定したサービスがアクティブになると自身もアクティブになる。
指定したサービスが失敗すると自身も停止する。

Type

simple: 実行されたプロセスが直接サービスを提供するタイプのプログラム。
forking: 実装プロセス側でdaemon 化する場合
oneshot: 初期化など1発実行する

既存ユニットのカスタマイズ方法

drop-inに書く
以下例:
unit:/lib/systemd/system/httpd.service
drop-in: /etc/systemd/system/httpd.service.d/xxx.conf
(拡張子は*.confにすること)
*.confに書いた設定が上書きされる

試してみる

RequiredBy / WantedByがうまくいかない

試してみると RequiredByを指定しているのになぜか依存先が失敗しているのに起動してしまう。
その理由は、RequiredBy / WantedByのシンボリックリンクの作成はsystemctl enableにしたときに作成されるから。
つまりRequiredBy / WantedByを書き換えると、disable enableが必要になる。(面倒くさい)
シンボリックリンクは例えば「/etc/systemd/system/test1.service.requires」ディレクトリに作成される。

以下マクロで行う

#!/bin/bash

sudo systemctl disable test1.service
sudo systemctl disable test2.service

sudo systemctl enable test1.service
sudo systemctl enable test2.service

sudo systemctl daemon-reload

sudo systemctl list-dependencies test1.service --after

After Beofreが逆?

test1.service
[Unit]
Description = test2
[Service]
Type = simple
[Install]
WantedBy = multi-user.target

test2.service
[Unit]
Description = test2
After = test1.service
[Service]
Type = simple
[Install]
WantedBy = multi-user.target

test2.serviceのAfter=test1.serviceなので
test1.service→test2.serviceだと思うのだが、なぜか逆の意味になってる。

sudo systemctl list-dependencies test1.service --after
test1.service
● tqsystem.slice
● tqsystemd-journald.socket
● tqbasic.target
● x tq-.mount
● x tqsystemd-ask-password-plymouth.path

sudo systemctl list-dependencies test2.service --after
test2.service
● tqsystem.slice
● tqsystemd-journald.socket
● tqtest1.service
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?