notificação de launchd na saída anormal

2

Eu tenho um job pllist launchd que executa um script de shell simples que invoca rdiff-backup para fazer backup de um diretório remoto através de SSH para o meu computador. O trabalho é executado a cada hora e funciona bem.

Exceto o outro dia houve uma falha de energia * e o trabalho de rdiff-backup foi interrompido. Na próxima vez em que o launchd executou o script, o rdiff-backup falhou e registrou sua falha no caminho especificado no plist. O launchd, percebendo o código de saída anormal, parou de tentar executar o script.

E eu não tinha ideia por seis dias.

Obviamente, não quero uma notificação do código de saída cada hora em que o script termina. O que posso fazer para ser notificado apenas de saídas anormais?

(*) Acontece que a bateria do meu no-break estava passando no autoteste quando invocada, mas na verdade não tinha a capacidade de alimentar uma carga mínima por mais de 3 segundos.

samh
fonte

Respostas:

1

A abordagem tradicional, e. com cron empregos, é canalizar erro padrão para um programa como mail isso é inteligente o suficiente para não enviar mensagens vazias. A diferença com o launchd, como você descobriu, é que o mecanismo para redirecionar o erro padrão está dando um StandardErrorPath para que seja escrito, o que não é tão conveniente para esse propósito como terminar sua entrada no crontab com | mail ….

Minha solução usual é ter um script wrapper verificar o StandardErrorPath e me avise se houver algum problema. Isso pode ser parte da mesma tarefa launchd, portanto, a verificação ocorre antes da próxima execução agendada ou você pode ter uma tarefa separada que apenas gerencia os logs de erros (talvez usando um QueueDirectories chave).

Eu acho que você também poderia, por exemplo, usar um pipe nomeado como seu trabalho é StandardErrorPath, mas eu nunca tentei isso.

LiberalArtist
fonte