이라는 서비스가 있습니다 Type=oneshot
. 일부 서비스는 Wants
및 을(를) 사용하는 이 서비스 에 의존합니다 Require
.
systemd
매뉴얼 페이지 에 따르면 Restart=no
이것이 기본 설정이며, 실패하더라도 서비스가 다시 시작되지 않습니다. 하지만 제 경우에는 journalctl
서비스가 두 번 다시 시작되었다는 로그를 볼 수 있습니다.
따라서 질문은 Restart=no
존재하더라도 왜 재부팅해야 하는가입니다. Restart=no
서비스 파일에 명시적으로 추가하려고 시도했지만 여전히 재부팅됩니다. 결과가 성공이든 실패이든 내 서비스가 한 번만 실행되기를 원합니다.
내 Systemd 버전은 250입니다: systemd 250(250.5+)
답변1
Restart=
이는 서비스 내부 사양일 뿐이며 해당 단위를 호출하는 다른 서비스로 확장되지 않습니다. ~에서수동.
Restart=
서비스가 시작될 때 다시 시작해야 하는지 여부를 구성합니다.서비스 프로세스종료되었거나, 종료되었거나, 시간 초과되었습니다. 서비스 프로세스는 주요 서비스 프로세스일 수도 있지만, , ,
ExecStartPre=
,ExecStartPost=
또는 로 지정된 프로세스 중 하나 일 수도 있습니다 . 시스템 작업(예: 서비스 중지 또는 다시 시작)으로 인해 프로세스가 종료되면 서비스가 다시 시작되지 않습니다. 시간 초과에는 누락된 감시 장치 "연결 유지 핑" 기한과 서비스 시작, 다시 로드 및 작업 중지 시간 초과가 포함됩니다.ExecStop=
ExecStopPost=
ExecReload=
다시 시작은 장치 자체의 프로세스만을 의미합니다.
그리고 예를 들어 Wants=
(수동)
하이브가 이미 시작된 경우 이 옵션에 나열된 장치가 시작됩니다. 그러나 나열된 장치가 시작되지 않거나 트랜잭션에 추가될 수 없는 경우 전체 트랜잭션의 유효성에 영향을 미치지 않으며 해당 장치는 계속 시작됩니다. 이는 한 장치의 시작을 다른 장치의 시작에 연결하는 권장 방법입니다.
기타 단위 섹션에는 언급된 옵션 이 Restart=
없습니다.[Service]
다른 장치에서 서비스를 다시 시작하도록 요청하는 것을 완전히 억제하기 위해 두 가지 옵션을 생각했습니다.
1. 본 기기로 걸려온 모든 통화를 삭제합니다.
분명히 이는 모든 호출 단위를 변경하고 Wants=
유사한 참조를 제거하고 시작 시 호출을 유지하는 것을 의미합니다.
2. 프로세스가 실패하더라도 장치를 성공시키십시오.
항상 성공하도록 프로세스를 직접 바꿀 수 있습니다.
ExecStart=/bin/bash -c '/path/to/executable || true'
물론 실행 파일이 systemd
쿼리에 실패했는지 알 수 없습니다.