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


42

コマンドを実行すると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  
getty@.service                             enabled 
gpsd.service                               indirect
gpsdctl@.service                           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サービスとその機能を正確に知っているので、自分でインストールしました。一般的なソリューションにもっと興味があります。

回答:


47

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

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


8
必要に応じて、マスク状態を削除する方法も説明してください。
erikbwork

19
ありmaskunmask一緒に使用できるコマンドはsystemctl。だからただやるsystemctl unmask name_of_service.service
ケラーシュパイヒャー

やってはsystemctl unmask name_of_service.service完全に私のサービス定義ファイルを削除し/etc/systemd/system/、今、私は再びそれを追加する必要がありますので、。それが再びマスクされるようになると、私はループに巻き込まれます
Eldamir

1
こんにちはEldamirは、/etc/systemd/systemサービスの単なるシンボリックリンクです。サービスの場合は、リンク先の*.serviceファイルを追加/lib/systemd/systemする/etc/systemd/system必要がenableあります。maskリンクを作成している/dev/nullunmaskから、このリンクを削除して/etc/systemd/system、誰かがそこにファイルを置く場合は明らかにそれは違いはありません。
ケラーシュパイヒャー

3

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

この設定は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(ソースコードはこちら)によって処理されます。

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

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


サービスのマスキングと削除には、パッケージの削除と削除の違いが伴います。最初のケースでは、構成ファイルが保持されているため、誤ってサービスをアクティブ化することは潜在的に危険です(サービスファイルはまだ構成ファイル内にある可能性があるため)。パージされたパッケージでは、サービスファイルも削除され、マスクされません。
Fiximan

0

マスクされた状態に関する情報を要求しているため、開始後に定義を変更し、リロード(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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.