/usr/bin/mail
realiza um duplo fork
para daemonizar sendmail
para enviar o email. Este sendmail
proc é conhecido por init
, então normalmente ele não seria afetado por nada que acontece com o pai original - exceto no caso do systemd, que o neto de renome ainda está no mesmo cgroup do serviço original. Quando systemd
destrói as coisas, ele mata todos os processos dentro do cgroup, incluindo o conhecido processo sendmail
.
O comando mail
correu bem, mas sendmail
foi morto pelo systemd antes de ter a chance de fazer o que queria.
Você pode contornar isso definindo KillMode
na seção Unit
como process
(o padrão é control-group
). Isso fará com que systemd
apenas mate o processo que foi acionado diretamente.
Curiosamente, a maneira como eu tropecei nisso foi através do uso de strace
. Um strace
normal não revelou nada, mas o mail
de repente começou a funcionar ao usar strace -f
. strace -f
estava fazendo com que o processo principal continuasse até que todas as crianças e netos órfãos tivessem se envolvido.