Uma solução possível que estou tentando é
[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
Onde o script tag.sh
irá touch /ack/TAG_SUCCESS
no final da execução. Acredito que isso fique muito próximo do comportamento desejado porque ExecStartPre
será executado sequencialmente, aguardando a conclusão bem-sucedida antes de chamar ExecStart
e a unidade só é considerada Starting
once ExecStart
é chamado. Concluímos a tarefa de inicialização.
Mas isso ainda parece um hack gigante?