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.