Systemd가 대상 유닛을 다시 격리하도록 강제 실행

Systemd가 대상 유닛을 다시 격리하도록 강제 실행

내 목표는 명령을 사용하여 그래픽 대상 장치를 프로그래밍 방식으로 다시 실행하는 것입니다 systemctl. this 을 사용할 수 있다는 것을 알고 있지만 sudo systemctl isolate graphical.target그래픽 대상이 이미 활성화되어 있으면 이 접근 방식이 작동하지 않는 것 같습니다.

현재 활성화되어 있는 경우에도 그래픽 대상 장치를 깔끔하게 시작하는 방법에 대한 지침을 찾고 있습니다.

예를 들어 systemd그래프를 다시 시작하기 전에 모든 대상 프로세스(+기타)를 강제 종료하는 명령입니다. 시스템을 다시 재부팅한 것과 거의 같습니다.

이제 이를 달성하기 위해 먼저 구조 대상으로 전환한 다음 isolate다시 그래프로 돌아갑니다. 더 나은 해결책이 있습니까?

답변1

systemctl의 매뉴얼 페이지에는 이것이 isolate위험하다고 명시되어 있습니다. 이는 단일 서비스를 다시 시작하는 최선의 방법이 아닐 수도 있습니다. 내 시스템에는 graphical.target252개의 종속성이 있습니다. 격리가 제안한 대로 수행되면 모든 시스템을 재부팅하는 것보다 시스템을 재부팅하는 것이 더 나을 수 있습니다.

그래픽 인터페이스를 지원하는 특정 서비스를 찾아서 restartgraphic.target을 다시 시작하는 대신 해당 특정 서비스를 격리하는 대신 사용해야 합니다.

모든 종속성을 나열할 수 있습니다. systemctl list-dependencies graphical.target 최소한 몇 가지 가능한 디스플레이 관리자를 나열할 수 있습니다.systemctl list-unit-files '*dm.service'

두 가지 가능한 후보는 lightdm.service또는 입니다 gdm.service.

예를 들어 활성화된 경우(시작되었을 수도 있음) sudo systemctl restart lightdm.service그래픽 인터페이스가 다시 시작됩니다.

답변2

예를 들어, 그래프를 다시 시작하기 전에 systemd가 모든 대상 프로세스(+기타)를 강제로 종료하도록 하는 명령입니다. 시스템을 다시 재부팅한 것과 거의 같습니다.

이 명령은 systemctl soft-rebootv254의 새로운 명령입니다.

이전 버전에서는 최소 대상(예: systemctl rescueaka systemctl isolate rescue.target)으로 전환하고, sulogin 프롬프트를 기다린 후, 루트 비밀번호를 제공하고, 다시 전환합니다( systemctl default). v254까지는 추가되지 않았기 때문에 단일 단계 명령이 없습니다.

(또는 systemctl kexec"커널 재부팅"을 수행할 수도 있습니다. 즉, 평소대로 모든 프로세스와 서비스를 중지한 다음 새 Linux 커널을 시작하고 모든 것을 다시 시작합니다. 단, 펌웨어와 부트로더를 건너뛰는 것, 즉 Linux에서 Linux로 직접 점프하는 것입니다. 불행하게도 kexec는 약간 번거롭고 항상 작동하지는 않습니다).

관련 정보