Um fork do job cron / exec () s antes de terminar. O que acontece com a stdout da criança?

1

Normalmente, os stdout e stderr de uma tarefa cron são enviados por e-mail para mim (de acordo com a configuração MAILTO em crontab ) quando a tarefa é concluída .

E se meu trabalho começar outro trabalho com fork / exec (ou simplesmente exec ) ou com system("foo &") ?

  • O que acontece com o stdout / stderr do trabalho filho? Vou recebê-lo via e-mail?

Um resultado ideal seria um e-mail separado para o pai e a criança, mas tenho certeza de que teria de fazer isso sozinho.

    
por sds 08.09.2017 / 15:17

1 resposta

2

Um processo filho herda seu stdin, stdout e stderr de seu pai. Bifurcação e exec são comuns em tarefas agendadas (considere que cada comando executado em um script de shell envolve uma bifurcação / exec). A saída geralmente vai para o mesmo email do cron.

Ter que ir para um e-mail separado é bastante fácil: apenas canalize seu stdout / stderr para mail (ou similar):

#!/bin/sh

command-1 2>&1 | mail -s 'output 1' [email protected]
command-2 2>&1 | mail -s 'output 2' [email protected]

Se você quiser o único e-mail do cron, se não o comportamento vazio, moreutils inclui um conveniente ifne para isso ( … | ifne mail -s… ).

    
por 08.09.2017 / 15:56

Tags