Ideally, I would like to not modify the configuration file above.
Difícil! É a coisa certa a fazer.
Você precisa alterar seu exec
para script
e interromper a execução desse programa python em um subprocesso bifurcado como parte de um pipeline. Esta resposta do ServerFault explica como fazer isso em um script de shell incorporado. Eu faria apenas uma mudança no roteiro dado lá, na última linha:
exec python -u /opt/XYZ/my_prog.py 2>&1
Não há uma boa razão para não registrar erros padrão, afinal de contas.
Reviravoltas cada vez mais complexas para lidar com bifurcações, deexpect daemon
a comutação para systemd
, deixam de perceber que a coisa certa a fazer é parar o daemon de bifurcar . Se há uma coisa boa a sair da confusão atual, é a confirmação contínua de que o que a IBM escreveu e recomendou em 1995 esteve certo todos esses anos.
Acostume-se com a idéia de daemons carregamento de cadeia . Há muitos conjuntos de ferramentas que simplificam essas coisas. Acostume-se com a ideia de não usar scripts de shell também. Há uma abundância de conjuntos de ferramentas que são projetados especificamente para este trabalho, que eliminam as sobrecargas de shells ( que é uma boa idéia conhecida no mundo do Ubuntu ).
Por exemplo: os comandos shell na resposta do ServerFault podem ser substituídos por um script que use execline
tools de Laurent Bercot que são projetados para serem capazes de fazer isso sem subcasos e FIFOs desvinculados:
#!/command/execlineb -PW
pipeline -w {
logger -t my_prog.py
}
fdmove -c 2 1
python -u /opt/XYZ/my_prog.py
que você simplesmente faria
exec /foo/this_execlineb_script
Com o meu nosh
toolset , seria similarmente um script contendo:
#!/usr/local/bin/nosh
pipe
fdmove -c 2 1
python -u /opt/XYZ/my_prog.py | logger -t my_prog.py
Ou, como alternativa, pode-se ter essa sub-rotina diretamente na definição de tarefa do Upstart (usando um truque para evitar metacaracteres do shell para que o Upstart não crie um shell):
exec /usr/local/bin/exec pipe --separator SPLIT fdmove -c 2 1 python -u /opt/XYZ/my_prog.py SPLIT logger -t my_prog.py
Leitura adicional
- Russ Allbery (2013-12-18). Bug # 727708: upstart propôs política no Debian . debian-ctte.
- Jonathan de Boyne Pollard (2001). " Não bifurque () para ' coloque o daemon no fundo '. ". Erros a evitar ao projetar programas do programa Unix . Respostas frequentemente dadas.