자동으로 다시 시작되는(예: 자동 업데이트 후) 여러 가지 서비스가 있습니다. 불행히도 재부팅하면 나타나지 않습니다. service <service name> status
비활성 상태이고 목록에 없음이 표시되기 때문에 알 수 있습니다 ps
. 기본 실행 파일이 종료되면 systemd가 서비스를 종료한다고 생각합니다. 로그에는 오류 징후가 표시되지 않습니다.
서비스는 시스템 서비스가 있든 Type=simple
없든 시스템 서비스로 정의됩니다 PIDfile=
. systemd가 프로세스를 "소유"하고 따라서 PID를 알고 있으므로 먼저 쓰기 가능한 폴더를 만들 필요가 없기 때문에 이 방식을 유지하는 것을 좋아합니다 /var/run/
.
원래 시작된 프로세스가 종료되면 새로 시작된 프로세스를 "다시 검색"하도록 systemd에 지시할 수 있는 방법이 있습니까? systemd는 서비스를 다시 시작하지 않으므로 매뉴얼에서 찾은 대부분의 다시 시작 관련 옵션이 적용되지 않습니다.
운영 체제: Ubuntu 15.04, 시스템 219.
답변1
원래 실행 파일이 종료되면 systemd에게 다른 실행 파일을 "다시 검색"하도록 지시할 수 있는 방법이 있습니까?
실행 파일은 죽지 않습니다. 프로세스가 종료됩니다. 올바른 질문을 하면 답이 나올 것입니다. 이전 기본 서비스 프로세스가 조용히 종료될 수 있도록 systemd에게 새로운 기본 서비스 프로세스를 생성하고 이를 넘겨주라고 지시할 수 있는 방법이 있습니까? 바로 여기에. notify
준비동의서 입니다 .
직접 시도한 적은 없지만 systemd 모델에서 이를 수행하는 방법은 현재 기본 프로세스가 새 프로그램 이미지를 실행하는 대체 서비스를 생성하도록 한 다음 sd_notify
new에서 systemd MAINPID
하고 기본 프로세스 토치를 새 프로그램에 전달하는 것입니다. , 그런 다음 종료됩니다. (이전 마스터 프로세스가 새 마스터 프로세스와 전환을 협상해야 하는 경우 상황이 약간 더 복잡해집니다.)
내가 말했듯이 나는 이 방법을 사용한 적이 없으며 지난 몇 년 동안 어떤 회귀에 대해서도 말할 수 없습니다. 그러나 2011년에는 사람들이 이 특정 문제를 해결한 방법이 보도된 바 있습니다.
(물론 자체 수정 서비스 프로그램을 갖는 대신 프로그램이 업그레이드되는 서비스의 실행 컨텍스트 외부에서 실행되는 별도의 "업데이트" 서비스를 갖는 것이 대안 설계가 될 수 있습니다.)
답변2
아니요, 거기는 아닙니다. 이는 systemd에 의해 부과된 엄격한 제한이며 프로세스 작동 방식에 상당한 획기적인 변화가 예상됩니다. 나는 정말로 내가 틀렸기를 바라지만 아직 알아내지 못했을 뿐이다.
앞으로,당신은 혼자가 아닙니다. 지금까지 가장 좋은 조언은 타이머 단위 또는 systemd를 사용하는 것 at
입니다 cron
. 이것이 당신에게 작은 위로가 된다면 이해합니다.