“중지 작업 실행 중…”과 같이“중지 작업”이란 정확히 무엇입니까?


28

종료 명령이 실행 된 후 때때로 다음과 같은 상태 메시지가 나타납니다.

A stop job is running for Session 1 of user xy

그런 다음 시스템은 잠시 동안 또는 ???에 따라 영원히 중단됩니다.

"정지 작업"이란 정확히 무엇입니까?

또한 왜 때로는 시간이 걸리고 정확하고 다른 시간이 영원히 실행될 수 있을까요?


1
어쩌면 작업을 중단 해야 합니까? 세션이 실제로 실행 되지 않는 작업을 중지 시켰 으므로 종료 신호에 응답 할 기회가 없습니다.
Kaz

답변:


27

systemd는 "작업"대기열 측면에서 내부적으로 작동합니다. 각 작업 (조금 단순화)은 특정 장치 중지, 확인, 시작 또는 재시작과 같은 조치 입니다.

예를 들어, systemd가 서비스 유닛 을 시작하도록 지시하면 , 목표를 달성하는 데 필요한 모든 유닛 (서비스 유닛, 마운트 유닛, 장치 유닛 등)에 대한 중지 및 시작 작업 목록을 작성합니다. 단위 요구 사항 및 종속성은 단위 순서 관계에 따라 순서를 정하고, 가능하면 자체 모순을 해결하고 (최종 단계가 성공한 경우) 대기열에 배치합니다.

그런 다음 대기열에있는 "작업"을 수행하려고합니다.

사용자 xy의 세션 1에 대한 중지 작업이 실행 중입니다.

여기에 단위 표시 이름Session 1 of user xy입니다. 서비스 단위가 아닌 ( 표시 이름에서) 세션 단위가됩니다. 이것은 systemd의 프로그램과 PAM 플러그인에 의해 유지되는 사용자 공간 로그인 세션 추상화입니다 . (본질적으로 이론적으로) 해당 사용자가 어딘가에서 "로그인 세션"으로 실행중인 모든 프로세스의 그룹입니다.logind

대기열에 포함 된 작업은 stop입니다. systemd 사람들이 잘못 세션으로 융합 한 때문에 아마 시간이 오래 복용 끊기를 세션으로 종료 . 그들은 후자를 일하기 위해 전자를 깰 수 있고, 일부 사람들은 전자를 일하기 위해 후자를 깰 시스템을 변경합니다. 체계화 된 사람들은 그들이 서로 다른 두 가지라는 것을 인식해야합니다.

로그인 세션에서을 본 후에는 무시 SIGTERM하거나 종료하는 데 시간이 오래 걸립니다 SIGTERM. 아이러니하게도 전자는 일부 작업 제어 쉘의 오랜 동작입니다. 그들이이 특정 작업 제어 쉘이 때 로그인 세션 리더를 종료하는 올바른 방법은 세션이되었음을 알려주는 것이다 끊었 가 모두 종료 그러자, 후 (내부 systemd 작업에 작업의 다른 종류의) 작업을하고 자신을 종료합니다.

실제로 발생하는 것은 systemd가에 도달 할 때까지 장치의 중지 시간 초과를 기다리는 것 SIGKILL입니다. 이 시간 초과는 물론 단위별로 구성 할 수 있으며 시간이 초과되지 않도록 설정할 수 있습니다. 그러므로 왜 다른 행동을 볼 수 있을까요?

추가 자료


1
이 답변에 따르면 unix.stackexchange.com/a/297318/224025 는 이번에 변경할 수 있습니다. 0 초로 변경하면 안전합니까 (또는 해를 끼칠 수 있습니까)?
GypsyCosmonaut

1
실제로, 답변 의 마지막 단락 과 추가로 읽을 수있는 사용 설명서는 이미 시간 초과 변경에 대해 알려줍니다. 0s 시간 제한이 무엇을 의미하고 사용하기에 안전한지 에 대한 질문은 "작업 중지"가 무엇인지, 시간 제한이 왜 다른지 에 대한 후속 질문 이므로 질문 방법에 따라 질문으로 질문 해야합니다. 나는 그것이 좋은 것 일지 모른다.
JdeBP

2

이 메시지는 systemd에서 온 것으로, 작업을 시작하고 중지하는 init 시스템입니다. 작업은 데몬 일 수 있지만 디스크 마운트 및 마운트 해제, / tmp 삭제 또는 부팅시 화면 밝기 저장 및 복원과 같은 작업은 거의 없습니다. systemctl list-units당신에게 아이디어를 제공합니다. Systemd는 "unit"과 "job"을 사용하여 거의 같은 것을 의미합니다.

와 같이 작업이 중지되면 systemctl stop ...문제는 실패를 선언하고 SIGKILL신호로 작업 프로세스를 종료하기 전에 작업이 완료되기를 기다리는 시간 입니다. SIGKILL프로세스를 깨끗하게 종료 할 수있는 기회를 제공하지 않기 때문에 사용 하지 않는 한 실제로 사용하고 싶지 않습니다. 일부 프로세스의 경우 몇 초 동안 실패를 선언하는 데 충분한 시간이 걸릴 수 있습니다. 데이터베이스와 같은 다른 프로세스의 경우 작업을 완전히 중지하는 데 상당한 네트워크 및 디스크 I / O가있을 수 있으므로 해당 장치를 몇 분 동안 완전히 종료 할 수 있습니다. .

종료시보고 systemctl stop $UNIT_NAME있는 것은 실행하는 데 시간이 걸리는 것과 같습니다 . SIGKILL이 발행되고 종료와 상관없이 경과 된 초와 최대 대기 시간을 표시하는 카운터가 있습니다.

오랜 지연을 예상 할만한 이유가 없다면 일반적으로 일종의 오작동을 나타냅니다. DHCP 서버가 릴리스에 응답하지 않아서 릴리스 조치가 시간 종료되어야하거나 일부 오류로 인해 디먼이 종료되지 않을 수 있습니다.


"Systemd는"unit "과"job "을 사용하여 거의 같은 것을 의미합니다." 나는 그것이 사실이라고 생각하지 않습니다. 대충 말하면, "직업"은 "단위"에게 무언가를하라는 요청입니다. 자세한 내용은 @JdeBP의 답변을 참조하십시오.
토마스

1

일부 서비스가 중단되어 시스템이 종료되기를 기다리고 있습니다. Systemd는 시간이 걸리는 시간을 정확하게 추정하지 못할 수 있으며, 시간 (일반적으로 90 초)은 인내심이 떨어지기 전에 시스템이 대기하는 시간입니다. 이 게시물을 참조하십시오 :

사용자 세션 c2에 대한 중지 작업이 실행 중입니다.


6
어떤 서비스가 중단되는지 어떻게 알 수 있습니까?
naitsirch

0

"작업 중지"는 systemd특정 "작업"이 중지되기를 기다리는 경우 입니다 (예 : 계속하기 전에 완료 대기중인 프로세스). "작업 중지 중 ..."등의 경고 메시지가 표시되면 기술적으로 작업 큐에 무언가가 보류 중임을 의미합니다.

그러나 전체 시스템 작업 대기열을 파고 들기 전에 때때로 이러한 경고 메시지는 환경 적 요인 으로 인한 간접적 인 결과입니다 (사실 메시지는 GitHub 리포지토리에서 가능한 버그로 참조되기도 함).

예를 들어 : "작업 중지"관련 메시지가 표시되는 이유를 알 수 없었습니다. 디스크가 거의 공간이 부족하여 OS가 이상하게 동작하기 시작했습니다.

서버를 더 큰 디스크로 업그레이드하고 재부팅하면 수정되었습니다.;)

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