web-dev-qa-db-ja.com

一部のsystemdサービスが「マスク」状態になっているのはなぜですか?

コマンドSudo systemctl list-unit-files(Sudoはオプションだと思います)を実行すると、すべてのサービスとその状態を示す出力が表示されます。

これが私のマシンからの抜粋です:

UNIT FILE                                  STATE
...
debian-fixup.service                       static  
debug-Shell.service                        disabled
display-manager.service                    enabled 
dns-clean.service                          enabled 
dsmcad.service                             enabled 
emergency.service                          static  
failsafe-x.service                         static  
friendly-recovery.service                  masked  
Fuse.service                               masked  
gdm.service                                masked  
getty-static.service                       static  
[email protected]                             enabled 
gpsd.service                               indirect
[email protected]                           static  
gpu-manager.service                        enabled 
halt-local.service                         static  
halt.service                               masked  
hostname.service                           masked
...

一部のサービスが「マスク」状態になっているのはなぜですか。これは、「サービスを手動でもsystemdでも開始できないため、「無効にする」よりも優れている」ことを意味すると思います。

サービスユニットの状態に関する詳細情報を取得するにはどうすればよいですか?

ユニットをそれぞれの状態にしたのは誰ですか?

たとえば、Sudo systemctl help dsmcadを試しました。これは、ユニットファイルからdocumentation = ...行のみを表示します。 /etc/systemd/system/dsmcad.service

注:ここでは、正確に dsmcadサービスとは何か、そしてそれが何をするかを知っています。自分でインストールしました。一般的なソリューションにもっと興味があります。

38
knb

maskは、disableの強力なバージョンです。 disableを使用すると、指定したユニットファイルのすべてのシンボリックリンクが削除されます。 maskを使用している場合、ユニットは/dev/nullにリンクされます。これは、たとえば、チェックすると表示されます。 systemctl status halt.serviceによって。 maskの利点は、手動でも、あらゆる種類のアクティベーションを防ぐことです。

注意:systemctl list-unit-filesはユニットの状態をリストしていますfiles(静的、有効、無効、マスク、間接)。サービスの状態とは関係ありません。 servicesを見るには、systemctl list-unitsを使用します。

43
Kellerspeicher

systemdは、起動時に非常に早い段階で(/ etc/hostnameから)ホスト名を設定するため、hostname.serviceは冗長としてマスクされます。

この設定はDebian systemdパッケージによって提供されます。

$ ls -l /lib/systemd/system/hostname.service
lrwxrwxrwx 1 root root 9 Apr  8 22:47 /lib/systemd/system/hostname.service -> /dev/null
$ dpkg-query --search /lib/systemd/system/hostname.service
systemd: /lib/systemd/system/hostname.service

同様に、Debianはシェルスクリプトなしでシステムをhalt実行できるようになりました。代わりに systemd-shutdown (ソースコード here )で処理されます。

サービスが手動でマスクされている場合、マスクは代わりに/etc/systemd/systemにインストールされます。

Debian/Ubuntuで削除されたサービスもマスクされます 。理由はわかりません。

3
sourcejedi

マスク状態に関する情報を要求しているため、開始後に定義を変更し、リロード(systemctl daemon-reload)および新しい状態はOKではない)サービスで観察できることに注意することが重要です。それを理解する簡単な例は、次のシナリオです。

a) the service is running well (already started)
b) edit the service definition file and delete everything in its contents
c) reload
d) state masked will be observed too

したがって、マスクされた状態は、不適切なサービス定義から発生する可能性があります。したがって、ユーザーは、サービスを不適切に編集することにより、マスクされていない状態を引き起こす可能性があります。

観察:意図的に発生するのか、単純なバグ(デフォルトのオプション)なのかわかりませんが、共有する興味深い情報があるかもしれません

0
Thiago Conrado