web-dev-qa-db-ja.com

「systemctl mask」と「systemctl disable」の違いは何ですか?

起動時にプリマスサービスを無効にすることで、Ubuntu GNOME 16.04の起動時間を改善したいと考えています。さまざまなWebサイトでそれを行う方法に関する2つの答えを見つけました。

# systemctl disable plymouth-quit-wait.service 
# systemctl mask plymouth-quit-wait.service 

私はそれらが何をするかを知らない限り、上記のいずれも実行できません。

31
pearlstar

サービスがenabledの場合、どこかにシンボリックリンクがあります

/etc/systemd/system

ほとんどの場合、どこかにあるユニットファイルに

/lib/systemd/system

役立つことに、サービスをenableすると、作成されたリンクとターゲットのフルパスがstdoutに出力されます。

無効化サービスはシンボリックリンクを削除するため、ユニットファイル自体は影響を受けませんが、systemdが/etc/systemd/systemを読み取るとき、サービスは次回の起動時にロードされません。

ただし、無効なサービスcanがロードされ、開始されます それに依存するサービスが開始された場合 ; enableおよびdisableは、ユニットの自動起動動作のみを構成し、状態は簡単にオーバーライドされます。

maskedサービスは、そのユニットファイルが/dev/nullへのシンボリックリンクであるサービスです。これにより、別の有効なサービスで必要な場合でも、サービスをロードすることが「不可能」になります。

サービスをmaskすると、/etc/systemd/systemから/dev/nullへのシンボリックリンクが作成され、元のユニットファイルはそのまま残ります。サービスをunmaskすると、シンボリックリンクが削除されます。

ただし、これらのコマンドが常に尊重されるわけではないことに気付きました。

ほとんどのサービスをマスクしようとすると失敗します。

$ Sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument

もちろん、最初にサービスを停止しました。 @Anwarは、マスキングは重要でないサービスでのみ可能であることを示唆しています。

自分でマスクしない限り、マスクされたサービスのマスク解除も失敗します(サイレント)。 Ibelieveこれは、/dev/nullへのシンボリックリンクの形式を除いて、今回は/lib/systemd/systemのサービスのユニットファイルがないためです。

$ file $(locate Fuse.service)
/lib/systemd/system/Fuse.service: symbolic link to /dev/null
$ Sudo systemctl unmask Fuse.service
$ systemctl status Fuse
● Fuse.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)

この問題を抱えているのは私だけではありません

マスクされたサービスx11-commonを実際にマスク解除するには、/dev/nullおよびSudo apt-get install --reinstall x11-common && Sudo systemctl daemon-reloadへのシンボリックリンクを削除する必要がありました。 systemctl status x11-commonでクエリすると、サービスには緑色の円が表示され、ユニットファイルはありませんが、ロードされてアクティブ(終了)になります。

詳細については、この記事 Systemctlの使用方法 が役に立つかもしれません。

47
Zanna

とても簡単です。

  • systemctl startsystemctl stop:問題のユニットを開始(停止)しますimmediately;
  • systemctl enablesystemctl disable:ブート時のautostartのユニットをマーク(マーク解除)(ユニット固有の方法で、説明[Install]セクションで);
  • systemctl masksystemctl unmask:問題のユニットを開始するすべての試みを許可しません(許可します)(手動で、またはデフォルトのブートターゲットの依存関係を含む他のユニットの依存関係として)。 systemdでの自動起動のマーキングは、デフォルトの起動ターゲットから問題のユニットに人為的な依存関係を追加することで実装されるため、「マスク」は自動起動も許可しないことに注意してください。

参照: systemctl(1) .

その他:Lennart Poettering(2011-03-02)。 「オフの3つのレベル」管理者向けのsystemd。 0pointer.de。

17
intelfx

要するに、

  • disableは、起動中にユニットを無効にします。ただし、そのユニットは起動後いつでも開始できます。

  • maskはユニットを完全に無効にします。マスクを解除せずに起動することはできません。これは、ブート中に失敗することを自動的に意味します。

6
Anwar