
Criei um script python para processar alguns dados que desejo executar como serviço. O script está processando os dados e depois hibernando por um tempo para processar os novos dados que chegam.
Meu problema é que quero executar várias instâncias do serviço, pois tenho algumas fontes de dados diferentes que desejo processar e meu script é feito para lidar com uma fonte de dados por vez.
Vejo algumas maneiras diferentes de fazer isso:
Eu poderia reescrever o script para lidar com todas as fontes de dados - isso o tornará inutilizável para uso ad hoc e também tornará mais difícil atualizar o conjunto de fontes de dados, pois não é possível descobrir automaticamente fontes que foram adicionadas ou removidas, portanto, mesmo que seja possível, esta é a minha opção menos favorável.
Eu poderia criar um script wrapper em bash ou python que iniciasse scripts para as fontes de dados que desejo processar. Isso também parece um pouco confuso.
Eu poderia criar um arquivo de unidade para cada fonte de dados, cada um chamando o script de processamento com os argumentos apropriados. Isso me fornecerá vários arquivos de sistema, ou seja, processamento_ds1.system, processamento_ds2.system etc. a menos que haja algum bom motivo para não fazê-lo.
Minha maneira preferida seria criar um arquivo de sistema que pudesse ser chamado com argumentos para cada fonte de dados ou iniciar todas as instâncias dentro do arquivo de sistema.
Então tenho duas alternativas:
Como é possível usar argumentos com arquivos unitários? Eu vi o postgresql poder iniciar diferentes versões usando @, ou seja
systemctl start postgres@12-main
para iniciar o cluster 12-principal. Mas como é que isto é feito? Não consigo encontrar nenhum arquivo de unidade útil para o postgresql.
Ou
É possível e aconselhável iniciar vários serviços a partir de um arquivo de unidade?
Responder1
Você pode usar um arquivo de unidade de modelo:unidade do sistema
Para OpenVPN, por exemplo: Você pode criar um arquivo de unidade com um nome [email protected]
e /etc/systemd/system
o seguinte conteúdo:
[Unit]
Description=OpenVPN connection to %i
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Cada vez que você executar
systemctl start openvpn@myconfig
o systemd, substituirá% i no arquivo da unidade por "myconfig". Então você executa /usr/sbin/openvpn --config /etc/openvpn/myconfig.conf