No Linux, escrevi alguns scripts para serem executados durante a inicialização e brinquei com as várias maneiras de instalá-los. Para scripts maiores, colocarei /etc/init.d
e vincularemos os /etc/rc.d/rc?.d
níveis de execução apropriados . Para scripts menores, anexarei a /etc/rc.d/rc.local
. Esse processo parece estar ocorrendo sem problemas.
Agora ajustei um dos meus scripts e está falhando. Estou tendo um tempo enorme para diagnosticá-lo porque não consigo capturar a saída de erro. Eu verifiquei /var/log/messages
e bisbilhotei o resto, /var/log
mas não consigo encontrar nada de útil.
Alguém sabe:
- essas mensagens de erro são capturadas automaticamente em algum lugar?
- caso contrário, como posso capturar o stdout / stderr dos meus scripts init.d?
Desde já, obrigado.
Respostas:
Não - eles vão para STDOUT (se você usar
echo
) ou STDERR (se você usarecho >&2
).Seus scripts precisam gravar em logs e / ou syslog por conta própria (sua distribuição pode conter algumas funções init.d que podem ajudar lá - adicione sua distribuição à sua pergunta).
Se você procurar logs, procure o
tee
comando. Se você for para o syslog, olhelogger
. Você pode combiná-los da maneira que quiser.fonte
Escreva um script de wrapper que chame seu script e redirecione a saída para um arquivo
fonte
Você pode criar uma função para ecoar a mensagem na tela e no syslog, algo como isto:
Você também pode colocar isso em um arquivo separado e incluí-lo em seus scripts com
fonte
[ -r ... ]
um teste para verificar se existe?Mensagens de scripts init geralmente não são capturadas em nenhum lugar. Portanto, você precisa implementar uma maneira de fazer isso sozinho. Uma boa idéia é usar
logger
para enviar toda a saída para o syslog. Este exemplo enviará stdout e stderr para o syslog:Encontrei-o neste excelente artigo: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .
fonte