[unix] Systemd : “oneshot”서비스가 처음 실패 할 경우 재 시도하는 방법은 무엇입니까?

systemd 서비스 맨 페이지를 몇 번 읽었지만 여전히 기본적인 시스템 패턴을 알 수는 없습니다.

부팅시 시작 프로세스를 한 번 (도커 컨테이너 또는 드라이브 포맷과 같은) 실행하여 성공적으로 완료하고 싶습니다. 그러나 Type = oneshot을 사용하면 Restart = on-failure를 사용할 수 없으며 실패하면 작업을 다시 시도하지 않습니다. 여기에 명백한 것이 빠져 있습니까?

또한 Restart = on-failure로 Type = simple 설정을 시도했지만 많은 경우 oneshot 서비스가 제공하는 다음 동작 (맨 페이지에서)이 필요합니다.

oneshot의 동작은 단순과 유사합니다. 그러나 systemd가 후속 장치를 시작하기 전에 프로세스를 종료해야합니다.

업데이트 :



답변

내가 시도하고있는 가능한 해결 방법은

  [Unit]
    Description=Tags instance and EBS vols
    After=docker.service
    Requires=docker.service

    [Service]
    ExecStartPre=/usr/bin/docker run --rm -v /opt/tag.sh:/tag.sh -v /opt:/ack --entrypoint=/bin/sh alpine /tag.sh
    ExecStartPre=/usr/bin/sh -c '[[ -e /opt/TAG_SUCCESS ]]'
    ExecStart=/usr/bin/rm /opt/TAG_SUCCESS
    Restart=on-failure
    RestartSec=30

스크립트 tag.shtouch /ack/TAG_SUCCESS실행이 끝나는 곳. 나는 이것이 ExecStartPre순차적으로 실행되어 호출하기 전에 성공적인 완료를 기다리는 동안 ExecStart장치가 Starting한 번만 ExecStart호출되어 시작 작업이 완료 되었다고 확신하는 시점 에서 원하는 동작에 매우 가깝다고 생각합니다 .

그러나 이것은 여전히 ​​거대한 핵처럼 느껴지십니까?


답변