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.sh
가 touch /ack/TAG_SUCCESS
실행이 끝나는 곳. 나는 이것이 ExecStartPre
순차적으로 실행되어 호출하기 전에 성공적인 완료를 기다리는 동안 ExecStart
장치가 Starting
한 번만 ExecStart
호출되어 시작 작업이 완료 되었다고 확신하는 시점 에서 원하는 동작에 매우 가깝다고 생각합니다 .
그러나 이것은 여전히 거대한 핵처럼 느껴지십니까?