재부팅하지 않고 systemd를 다시 시작할 수 있습니까?


39

yum updateRHEL 7.4에서 서비스를 다시 시작하려고합니다 . 나는 systemctl를 사용하여 모든 서비스를 다시 시작 할 수 있지만 needs-restarting에서이 yum utils나는 또한 자신을 systemd 재시작해야한다고 하더군요 :

# needs-restarting
1 : /usr/lib/systemd/systemd --system --deserialize 21

systemd서버를 재부팅하지 않고 다시 시작할 수 있습니까 ?

에 대한 몇 가지 언급을 찾았 systemctl daemon-reload지만 이것이 다시 시작 요구 목록에서 사라지지는 않습니다.

답변:


43

데몬을 다시 시작하려면

systemctl daemon-reexec

이것은에 설명되어 있습니다 :systemctl

시스템 관리자를 다시 실행하십시오. 관리자 상태를 직렬화하고 프로세스를 다시 실행하고 상태를 다시 직렬화 해제합니다. 이 명령은 디버깅 및 패키지 업그레이드를 제외하고는 거의 사용되지 않습니다. 때로는 헤비급으로 도움이 될 수 있습니다 daemon-reload. 데몬을 다시 실행하는 동안 사용자 구성을 대신하여 시스템 수신 대기하는 모든 소켓에 액세스 할 수 있습니다.

불행히도 실제로 다시 시작 needs-restarting되었는지 확인할 수 없습니다 systemd. systemd execs프로세스 자체의 시작 시간을 재설정하지 않는 자체 재시작. 그러나 needs-restarting실행 파일의 수정 시간을 프로세스의 시작 시간과 비교하여 프로세스를 다시 시작해야하는지 여부를 결정하고 결과적으로 항상 systemd다시 시작해야하는지 고려 합니다. systemd실제로 다시 시작 해야하는지 여부를 결정하려면 , 의 출력을 확인할 수 있습니다 lsof -p1 | grep deleted: systemd라이브러리 사용 libsystemd-shared, 동일한 패키지로 제공되며 데몬과 함께 업그레이드되므로 systemd다시 시작해야 할 경우 삭제 된 버전의 라이브러리를 사용하여 볼 수 있습니다. lsof삭제 된 파일 이 표시 systemd되지 않으면 다시 시작할 필요가 없습니다. (감사합니다힌트를위한 Jeff Schaller !)


1
@Raman daemon-reexecsystemdpid 1 로도 작동하도록되어 있습니다 .
Stephen Kitt

3
다시 시작해야하는 요점은 github.com/rpm-software-management/yum/blob/master/… 로 요약됩니다. 여기서 PID의 "start_time"을 쿼리합니다. daemon-reexec가 업데이트하지 않으면 재시작이 "혼란"상태로 유지됩니다.
Jeff Schaller

1
관련된 코드 경로가 특히 RedHat가 아닌 시스템에서 잘 테스트되었다고 가정하지 마십시오. 기술적으로 daemon-reexec를 실행할 수 있지만 재부팅하는 것이 더 안전합니다.
Harald

2
@Harald 누군가 systemd데비안과 파생 제품을 업그레이드 할 때마다 사용 되므로 잘 테스트되었습니다. 또한 합리적으로 간단합니다 ( do_reexecute).
Stephen Kitt

1
@StephenKitt-실행하려고 lsof -p1 | grep deleted하면 다음 출력이 생성됩니다 lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. ( unix.stackexchange.com/questions/171519/… )를 읽으면 루트조차도 액세스 할 수없는 것으로 보입니다. 대안은 무엇입니까 lsof -p1 | grep deleted?
동기 부여

2

내 경우에는 방금 업그레이드 systemd했으며 모든 systemctl명령이 실패했습니다.

# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied

그러나 init맨 페이지 에 따르면 SIGTERMPID 1로 실행되는 데몬 으로 전송하여 동일한 작업을 수행 할 수 있습니다 .

kill -TERM 1

데몬을 다시로드 한 후 모든 systemctl명령이 다시 작동하기 시작했습니다.

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