서비스를 사용 중인데 예기치 않게 종료(중지)되었습니다. 어떻게 멈춰도 자동으로 다시 시작하고 싶습니다! 구성되었지만 Restart=on-abort
다시 시작되지 않았습니다. 제가 작성한 서비스가 아니고 다른 공급업체에서 제공하는 서비스이므로 서비스 충돌의 근본 원인을 추적하고 싶지만 근본 원인이 발견될 때까지 시스템을 계속 실행하기 위한 솔루션도 필요합니다. 서비스가 하루에 0번에서 3번까지 죽기 때문에 그렇게 자주 발생하지는 않습니다.
현재 서비스 설정은 Restart=on-abort
서비스 파일에 정의 되어 있습니다./etc/systemd/system/someone-elses.service
그렇다면 그것은 무엇을 Restart=on-abort
의미합니까?
restart=의 다양한 값이 무엇을 의미하는지 검색하고 알아냈지만 매뉴얼 페이지에서는 아무 것도 찾을 수 없습니다.
답변1
다양한 조건에 따라 서비스를 다시 시작하도록 systemd.service를 구성할 수 있습니다. 이 systemctl 매뉴얼 페이지이유에 대한 좋은 설명이 있고 그 이유가 이 답변에 포함되어 있으므로 이 답변은 그 자체로 유효할 수 있습니다.
정의 Restart=on-abort
는 깨끗한 종료 상태를 지정하지 않는 포착되지 않은 신호로 인해 서비스 프로세스가 종료되는 경우에만 서비스가 다시 시작됩니다. 이는 SIGHUP, SIGINT, SIGTERM 또는 SIGPIPE 이외의 신호를 의미합니다. 이 4가지 신호는 다음과 같이 설명됩니다.깨끗한 신호systemctl 매뉴얼 페이지를 통해.
Restart=always
제 경우에는 프로세스가 어떻게 종료되거나 종료되더라도 다시 시작하고 싶기 때문에 실제로 그렇게 하고 싶습니다 . 지속적인 재부팅을 방지하기 위해 재부팅 사이에 약간의 시간을 두고 싶기 때문에 이 속성은 RestartSec=15s
나에게 중요합니다(이런 일이 발생하는 것을 원하지 않지만 이것이 바로 이 설정이 있는 이유입니다).
다음은 에서 발췌한 것입니다.systemctl 매뉴얼 페이지SO 형식으로 지정됩니다.
다시 시작 =값은
no
,on-success
,on-failure
,on-abnormal
,on-watchdog
,on-abort
또는 일 수 있습니다always
.
다음은 각 값에 대한 설명입니다.
아니요(기본값) - 서비스 로 설정된 경우
no
다시 시작되지 않습니다 .성공- 로 설정하면
on-success
서비스 프로세스가 완전히 종료된 경우에만 다시 시작됩니다. 이 경우 깨끗한 종료는 종료 코드 0 또는 SIGHUP, SIGINT, SIGTERM 또는 SIGPIPE 신호 중 하나와 SuccessExitStatus=에 지정된 종료 상태 및 신호를 의미합니다.실패의 경우- 로 설정하면
on-failure
프로세스가 0이 아닌 종료 코드로 종료될 때 신호(코어 덤프 포함, 위의 4개 신호 제외), 작업(예: 서비스 다시 로드)에 의해 종료되고 서비스가 다시 시작됩니다. 시간 초과가 있는 경우, 구성된 감시 시간 초과가 트리거되는 경우.이상상태- 로 설정하면
on-abnormal
신호(코어 덤프 포함, 위 4개 신호 제외)에 의해 프로세스가 종료되거나, 작업 시간이 초과되거나, 감시 시간 초과가 발생하면 서비스가 다시 시작됩니다.중단된 경우- 로 설정하면
on-abort
클린 종료 상태로 지정되지 않은 포착되지 않은 신호로 인해 서비스 프로세스가 종료되는 경우에만 서비스가 다시 시작됩니다. on-watchdog으로 설정된 경우 서비스는 감시 시간 초과가 만료된 경우에만 다시 시작됩니다.언제나- 로 설정하면
always
정상적으로 종료되거나, 신호에 의해 비정상 종료되거나, 타임아웃되더라도 서비스를 다시 시작합니다.
이 훌륭한 답변도 참조하십시오! https://unix.stackexchange.com/a/507917/119816