質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

Q&A

解決済

systemdの起動サービスの確認方法

redlinux1015
redlinux1015

総合スコア33

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。

2回答

0グッド

2クリップ

16404閲覧

投稿2017/02/23 11:09

編集2017/02/23 13:40

[概要]
設計書を書くにあたり、以前のchkconfig --list にて確認していたフォーマットに合わせて、targetごとのサービス起動設定をマトリックス表として作成する必要があります。

[環境]
RHEL7.2

[困っていること]
systemdでは/lib/systemd/system配下にあるファイルに起動設定が書いてあると調査の中で理解したのですが、確認方法についてご教示頂きたく投稿しました。

下記が実行したコマンドです。
cd /lib/systemd/system
grep WantedBy=multi-user ./.service
grep WantedBy=graphical.target ./
.service
grep WantedBy=rescue.target ./*.service

multi-userはそれなりにリストが出てきたのですが、graphicalは5行ほどしか出力されず、rescueに至っては0でした。

どのようにしたら、ターゲットごとのサービス起動が確認できますか。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

2

ベストアンサー

systemdにはランレベルの概念がなく、より細かい「ターゲット」の概念を用います。従来のランレベルに対応するsystemdのターゲットは、大体次の表の通りです。

ランレベルターゲット
0poweroff.target
1rescue.target
2multi-user.target
3同上
4同上
5graphical.target
6reboot.target

たとえば、multi-user.target (従来のランレベル2、3、4に相当) に依存している (従来なら、そのランレベルに達したときに起動される) サービスの一覧を取得するには、次のように実行します。

systemctl list-dependencies multi-user.target ```結果のうち「``.service``」がつくものがサービスと考えてかまいません。各サービスの詳細を知りたければ、たとえば``crond.service``なら次のように実行します。

systemctl status crond.service

(2/27追記) systemdの基本的な概念や使いかたは、Red Hatの次の資料に解説されていますので、ひと通り読んでみて下さい。SysV initスクリプトとSystemdを比較して違いを説明しています。 - 『Red Hat Enterprise Linux 7 システム管理者のガイド』「[第9章 Systemdによるサービス管理](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/System_Administrators_Guide/chap-Managing_Services_with_systemd.html#sect-Managing_Services_with_systemd-Introduction)」 読んでみて、わからないことがあれば、あらためてご質問下さい。

投稿2017/02/24 07:45

編集2017/02/27 03:13
ikedas

総合スコア3130

TaichiYanagiya, redlinux1015👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

redlinux1015

2017/02/27 01:47

ご回答ありがとうございます。 回答を読ませて頂き、自分なりに理解しようと調べていたのですが、しっくりこない部分がありました。 ①結局、systemctl list-unit-filesで表示される結果は何なのか? 調べた限りでは、起動targetに関係なく、systemdが認識しているunitファイルを表示するという理解なのですが、disableやenableというのは何に拠って表示されているのかがわかりません。これだけ、現在のデフォルトターゲットの起動設定が表示されるのでしょうか。 # systemctl list-unit-files UNIT FILE STATE proc-sys-fs-binfmt_misc.automount static dev-hugepages.mount static dev-mqueue.mount static ・・・・ abrt-ccpp.service enabled abrt-oops.service enabled abrt-pstoreoops.service disabled abrt-vmcore.service enabled abrt-xorg.service enabled abrtd.service enabled accounts-daemon.service enabled ②以下の考え方で合っているか ・systemctl list-unit-files --type=serviceでサービスの全量を確認 ・systemctl list-dependencies XXXX.tagetでターゲットごとに起動するサービスを確認(赤丸は起動するが停止状態(dead)になる?)。
ikedas

2017/02/27 03:23 編集

回答に資料を追記しました。 ①systemctlでdisableやenableを設定します。chkconfigでonやoffするのと似ています。 ②緑がenabled、赤がdisabledです。 なお、SysV initとsystemdとはまったく同じ動作をするわけではありません。ですからご質問の「以前のchkconfig --list にて確認していたフォーマットに合わせて」という条件が具体的にどのようなことを意味するのかは、当方ではわかりません。その作業を指示した方にご確認いただくほかないと思います。
redlinux1015

2017/02/28 03:15

ご回答ありがとうございます。サービスを縦軸に、targetを横軸にして、それぞれのターゲットについてサービス起動状態をdiableあるいはenableにする、というフォーマットです。 資料を拝見し、runlevelに紐付くtarget以外にも複数targetがあること、それぞれのtargetに対する起動サービスについては単純には導けないことがわかりました。 ひとまずlist dependenciesの結果にてサービスが起動しているものとし、出力結果に載っていないサービスについては”-”で表現することで落ち着きました。 また、ご回答頂いた内容でlist dependenciesのドット表現についてですが、赤丸でもenabledになっているものがありました(ただし、状態はdead)。かと思えばdisabledになっている(ただし、loadされている)ものがありましたので、一概にdisabledであるとは言えないし、disabledだからと言って起動しないとも言えないようです。 enable/disableかは/usr/lib/systemd/system/multi-user.target.wants/にリンクが貼られているかどうかで、起動(load)しているかどうかについては.serviceファイルの設定を読み込むlist-dependenciesの結果を信頼した方がよさそうです。
ikedas

2017/02/28 03:29

たしかに、enabled/disabledとload/deadは対応しませんね。 たとえばデータベースサービスのように他のサービスの前提になっているものだと、他のサービスのユニットでRequiresに指定されているために、enabledになっていなくても起動してくる、といったことがあります。 おっしゃる通り、設定ファイルを解析するよりもsystemctlコマンドの出力を見たほうがいいと思います。
redlinux1015

2017/03/01 09:00

参考になればと思い、追記します。 ネットにある多くのページにはサービスを無効化するには以下を実行、と書いてあります。 systemctl disable [service] しかし、これでは直で起動しなくなっても、他のサービスから起動する場合があります。まさにikedasさんが上記で仰っていることです。 結果的に、systemctl list-dependenciesとsystemctl list-unit-filesに相違が発生します。 完全に無効化するには、以下を実行します。 systemctl mask [service] これで完全にサービスが起動しなくなるようです。 試したところ、systemctl list-dependenciesの結果にも出力されなくなりました。 依存関係があるサービスから起動しようとすると、エラーが起こるかもですが…本当に無効化したければそれも諸共maskですね。

1

systemctl list-dependencies でわかりませんでしょうか。

systemctl list-dependencies multi-user.target systemctl --plain list-dependencies multi-user.target | grep '\.service'

投稿2017/02/23 14:55

TaichiYanagiya

総合スコア11995

redlinux1015👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

systemd

systemdは、Linuxの起動処理及びシステム管理を行う技術です。他にも多くのサービス管理機能を備えており、ユーザープロセスを並列に起動しシステムの起動処理に要する時間を短縮できるなどの特徴があります。