systemdサービスを削除する方法


181

新しいサービスをインストールし、そのアプリケーションをもう必要としないことを決定して削除した場合、サービスは引き続きエラーsystemctlとして出力にリストされます

これはどこから来て、どうすればそれらを徹底的に削除できますか?

回答:


295

サービス抹消のための私のレシピ(rmステートメントに注意してください!)

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

systemdサービスが/etc/init.dの古いスタイルのスクリプトを「ラップ」する可能性があるため、それもクリーンアップすることができますが、systemdサービスが存在する場所ではありません


7
特に、systemdにユニットファイルが保存されている複数の場所があることに注意してください/usr/lib/systemd/systemとも /etc/systemd/system/。参照については、access.redhat.com
Mark Edington

6
私も/etc/init.d/[servicename]実行する前に削除する必要がありましたsystemctl reset-failed
アンドレア

4
ユニットファイルを削除する前に無効にするのを忘れていました。ところで、削除するすべてのユニットファイルを見つけるには、の出力を調べますsystemctl cat [servicename]
アミール

/etc/init.d/にある「ラップされた」古いスタイルのスクリプトである可能性がありますが、削除しなかった場合、削除後に残ったサービスの下に表示されたままになります。それは私に当てはまることを伝えることができます。回答にそれを追加してより完全なものにすることもできますが、できれば次の人がコメントを見てくれることを願っています。
マーロン

1
それはうまくいきました、ありがとう、しかし、私はなぜこのゴミを手動でクリーンアップするように作られているのか分かりません。
ロルフ

25

あなたはおそらく探していreset-failedます:

$ sudo systemctl reset-failed
$

systemdのmanページから:

reset-failed [PATTERN...]

指定されたユニットの「失敗」状態をリセットします。ユニット名が渡されない場合は、すべてのユニットの状態をリセットします。ユニットが何らかの方法で失敗した場合(つまり、ゼロ以外のエラーコードでプロセスが終了、異常終了またはタイムアウト)、自動的に「失敗」状態になり、サービスが終了するまで管理者による内省のために終了コードとステータスが記録されますこのコマンドで再起動またはリセットされます。


2
それは質問が求めているものではありません。なぜこれが17回支持されたのですか?
-psusi

1
これが唯一の正しい答えです。より多くの賛成票とチェックマークが付いている他のものは回避策です。
トーマス

1
私はOPの質問を読んでいませんが、これはが探していた答えでした。
いとこコカイン

23

アンインストールしたようですが、systemdフックを削除しなかったようです:

# systemctl disable [servicename]


4

@ mark-lakataの回答に追加し、rmコマンドに必要な注意力を念頭に置いてください。[chkconfig]プロセスを簡素化できます!(chkconfigについて読むにはここをクリック

コマンドのリストを再度繰り返すには:

  1. systemctl stop [servicename]
  2. chkconfig [servicename] off
  3. systemctl daemon-reload
  4. systemctl reset-failed

注:最初のコマンドは、現在のセッションでサービスを実行し続けるかどうかに応じてオプションです(この質問に関しては、コマンドを使用する必要があります)。

2番目のコマンドは、サービスの無効化と削除(シンボリックリンクの追跡)の両方を処理します。


1
chkconfigSysVinitサービスを有効/無効にする元のコマンドでした。を使用するシステムsystemdでは、下位互換性コマンドとして存在する場合があります。しかし、ネイティブsystemctlコマンドは同じくらい簡単ですsystemctl disable [servicename]
。– telcoM

1
さて、しかし、私は、このコマンドを使用する理由は、あなたがして明示的にrmコマンドを実行する必要はありません
garlicFrancium

1

systemdからサービスを削除する:

Systemdはユニット(サービスを定義するファイル)を使用して、ユニットを削除する必要があるサービスを削除します...ユニットの場所のリストは次のとおりです。

/etc/systemd/system/ (and sub directories)
/usr/local/etc/systemd/system/ (and sub directories)
~/.config/systemd/user/ (and sub directories)
/usr/lib/systemd/ (and sub directories)
/usr/local/lib/systemd/ (and sub directories)
/etc/init.d/ (Converted old service system)

システム更新:

systemctl daemon-reload
systemctl reset-failed

ゴーストサービス(見つかりません):

Systemdは、多くの理由でユニットが削除された場合でも、ゴースト(未検出)サービスをリストできます。

  1. systemdディレクトリの1つにまだ存在するユニット
  2. ユニットは終了しませんが、systemdディレクトリの1つにファイルリンクがまだ存在します
  3. サービスは他のユニットで使用されています*

(*)サービスが他のユニットで言及されていても存在しない場合、systemdはユニットファイルがなくても、そのサービスを未検出の状態でリストします...テキスト検索でそのサービスを使用しているユニットを検索できますそれらのユニットを編集します(そのサービスを後でインストールする場合はお勧めしません)

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