Este snippet irá canalizar a saída do seu serviço em logger, enquanto ainda permite que você execute o processo de serviço (substituindo assim o processo shell) então essa novata não fica confusa. Também faz Certifique-se de que o processo do registrador seja reparado no init, não é filho do seu serviço, e evita deixando cruft sentados no sistema de arquivos, mesmo embora precise criar um fifo temporariamente.
script
mkfifo /tmp/myservice-log-fifo
( logger -t myservice </tmp/myservice-log-fifo & )
exec >/tmp/myservice-log-fifo
rm /tmp/myservice-log-fifo
exec myservice 2>/dev/null
end script
Veja como funciona:
-
mkfifo /tmp/myservice-log-fifo
simplesmente faz o arquivo especial fifo (também conhecido como pipe nomeado). Digiteman 7 fifo
para mais informações. -
( logger ... </tmp/myservice-log-fifo & )
inicia a leitura do registrador a partir do fifo, em segundo plano. Os parênteses fazem com que o processo do registrador seja reparado no init, em vez de permanecer um filho do processo de shell atual. -
exec >/tmp/myservice-log-fifo
redireciona o stdout do shell atual para o fifo. Agora nós temos um descritor de arquivo aberto para esse fifo, e nós realmente não precisamos mais da entrada do sistema de arquivos ... -
rm /tmp/myservice-log-fifo
, então vamos removê-lo. -
exec myservice 2>/dev/null
simplesmente executa o serviço da maneira usual. O Stdout já está indo para o fifo, e isso não mudará quando o novo programa for executado.
UPDATE: set -e
não é necessário pois o Upstart executa scripts com esta opção por padrão (veja link )