Eu gostaria de propor um método que não use timeouts, mas que dependa do mecanismo do systemd para aguardar um arquivo existir antes de iniciar um programa.
Como você sabe, o Linux pode expor filas de mensagens posix como arquivos. No meu sistema Fedora, ele faz isso por padrão em /dev/mqueue/
, mas você pode criar o diretório e mount -t mqueue none /dev/mqueue
se não tiver.
Então você pode usar (veja man systemd.path
) uma unidade simples myqueueb.path
assim:
[Path]
PathExists=/dev/mqueue/queueb
[Install]
WantedBy=multi-user.target
e outro myqueueb.service
do mesmo nome (ou defina Unit=
no acima) com
[Unit]
Description=CMD_B
[Service]
User=USER_B
Type=simple
ExecStart=/FULLPATH/CMD_B
para fazer o que quiser. Não NÃO habilite a segunda unidade , mas use systemctl enable myqueueb.path
e systemctl start myqueueb.path
. Isso configura um inotifywait no arquivo /dev/mqueue/queueb
.
Quando o seu primeiro programa criar a fila de mensagens queueb
, esse arquivo aparecerá
e o systemd iniciará automaticamente myqueueb.service
e executará seu programa CMD_B
. Obviamente, você precisa alterar esses nomes para corresponder também aos seus nomes de filas e relacionamentos para o CMD_C.