체계화 된 서비스를 제거하는 방법


179

새 서비스를 설치 한 후 해당 애플리케이션을 더 이상 원하지 않고 삭제하기로 결정한 경우 서비스는 여전히 출력에서 errorsystemctl 로 나열됩니다 .

어디에서 왔으며 어떻게 완전히 제거 할 수 있습니까?

답변:


289

서비스 말살에 대한 나의 조리법합니다 (조심 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에서 이전 스타일 스크립트를 '랩핑'할 수도 있으므로이를 정리하고 싶을 수도 있지만 시스템 서비스 가 있는 곳 은 아닙니다 .


7
Systemd 단위 파일이 저장되는 위치는 특히 여러 곳에 /usr/lib/systemd/system있습니다 /etc/systemd/system/. 참조 : access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
Mark Edington

6
나는 또한 /etc/init.d/[servicename]달리기 전에 제거 해야했다systemctl reset-failed
Andrea

4
장치 파일을 제거하기 전에 비활성화하는 것을 잊었습니다. BTW, 제거 할 모든 단위 파일을 찾으려면의 출력을 검사하십시오 systemctl cat [servicename].
Amir

/etc/init.d/에 "래핑 된"이전 스타일 스크립트 일 수 있지만 제거하지 않으면 제거 후 남은 서비스에 여전히 표시됩니다. 나는 그것이 사실이라고 말할 수 있습니다. 답을 추가하여 더 완벽하게 만들 수 있지만 다음 사람이 주석을 볼 수 있기를 바랍니다.
Marlon

1
그것은 효과가 있었지만, 고맙지 만, 왜이 쓰레기를 수동으로 청소 해야하는지 모르겠습니다.
Rolf

25

당신은 아마 찾고 있습니다 reset-failed:

$ sudo systemctl reset-failed
$

systemd 매뉴얼 페이지에서 :

reset-failed [PATTERN...]

지정된 장치의 "실패"상태를 재설정하거나 장치 이름이 전달되지 않으면 모든 장치의 상태를 재설정하십시오. 어떤 방식 으로든 장치에 장애가 발생하면 (예 : 0이 아닌 오류 코드로 프로세스가 종료되거나 비정상적으로 종료되거나 시간 초과 됨) 자동으로 "실패"상태가되고 서비스가 종료 될 때까지 관리자가 종료 코드와 상태를 기록하여 기록합니다. 이 명령으로 다시 시작되거나 재설정됩니다.


2
그것은 질문이 전혀 요구하는 것이 아닙니다. 지구상에서 왜이 문제가 17 번이나 제기 되었습니까?
psusi

1
이것이 유일한 정답입니다. 더 많은 투표와 확인 표시가있는 다른 것들은 해결 방법입니다.
토마스

1
OP의 질문을 읽지 못했지만 이것이 내가 찾던 대답 이었습니다.
CousinCocaine

23

제거한 것처럼 들리지만 시스템 후크는 제거하지 않았습니다.

# 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

참고 : 첫 번째 명령은 현재 세션에서 서비스를 계속 실행할지 여부에 따라 선택 사항입니다 (이 질문의 경우 명령을 사용해야 함).

두 번째 명령은 서비스 비활성화 및 제거 (심볼릭 링크에 따라)를 처리합니다.


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. 시스템 디렉토리 중 하나에 여전히 존재하는 장치
  2. 장치가 종료되지 않지만 systemd 디렉토리 중 하나에 여전히 파일 링크가 있습니다.
  3. 이 서비스는 다른 단위로 사용됩니다 *

(*) 서비스가 다른 장치에서 언급되었지만 존재하지 않는 경우 systemd는 단위 파일이 없어도 해당 서비스를 찾을 수없는 상태로 계속 나열합니다 ... 텍스트 검색으로 해당 서비스를 사용하는 장치를 검색 할 수 있습니다 해당 단위를 편집하십시오 (나중에 해당 서비스를 설치하려는 경우 권장되지 않음)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.