Eu configurei unattended-upgrades
em servidores rodando Raspbian ( Raspbian GNU/Linux 9.4 (stretch)
). Versão das atualizações autônomas:0.93.1+nmu1
As atualizações funcionam, mas estou tendo problemas com os relatórios por e-mail. Eu quero usar mailx
para enviar relatórios. Se eu executar a atualização com o comando unattended-upgrade -v -d
, o relatório será enviado e usará a configuração de e-mail que tenho em /root/.mailrc
.
Quando unattended upgrades
são executados pelo timer Systemd ( apt-daily-upgrade.timer
), no entanto, ele não usará mailx
.
Se sendmail
estiver presente, é usado para enviar o e-mail. Nesse caso, o e-mail é enviado, mas o remetente é root@hostname
e as mensagens são sinalizadas como spam.
Se não houver sendmail
, vejo este erro no diário de apt-daily-upgrade
:
Cannot start "/usr/sbin/sendmail": executable not found (adjust *sendmail* variable)
Não consigo entender por que diferentes programas de email são usados dependendo de como a tarefa foi iniciada.
Eu tentei editar o unattended-upgrades
programa Python para forçá-lo a usar mailx
:
if os.path.exists(SENDMAIL_BINARY):
ret = _send_mail_using_sendmail(from_email, to_email, subject, body)
elif os.path.exists(MAIL_BINARY):
ret = _send_mail_using_mailx(from_email, to_email, subject, body
Eu mudei a variável SENDMAIL_BINARY
para apontar para um caminho inexistente para que fosse forçado a usar mailx
. Isso também funcionou quando invocado unattended-upgrades
manualmente, mas falhou quando foi executado pelo Systemd. (E o erro acima sobre tentar usar sendmail
ainda é registrado.)
Como posso forçar unattended upgrades
o uso mailx
mesmo quando é executado automaticamente pelo systemd e o que está causando a diferença no programa Mail que é usado?
EDITAR:
Arquivo de unidade do sistema que executa atualizações autônomas:
[Unit]
Description=Daily apt upgrade and clean activities
Documentation=man:apt(8)
ConditionACPower=true
After=apt-daily.service
[Service]
Type=oneshot
ExecStart=/usr/lib/apt/apt.systemd.daily install
KillMode=process
TimeoutStopSec=900
Sua pergunta é uma variação do FAQ Por que as coisas funcionam de maneira diferente no systemd? .
Um dos benefícios do
systemd
é que ele fornece um ambiente de execução consistente. Para errar no lado da segurança e simplicidade, as variáveis de ambiente definidas são mínimas.Os documentos relacionados ao
systemd
ambiente de execução detalham o que está definido.Você mencionou que sua configuração estava no
root
diretório inicial.man mailx
confirma que está olhando para dentro~/.mailrc
, ao contrário do caminho fixo/root/.mailrc
.Os
systemd
documentos esclarecem que a$HOME
variável só é definida quando aUser=
diretiva é usada. Você não compartilhou seusystemd
arquivo de serviço, mas presumo que, como está executando a tarefa como root, não usou aUser=
diretiva. Isso pode explicar parte do seu problema.Também parece que um caminho que você deseja pode não ser definido por sua
$PATH
variável de ambiente quando executado porsystemd
. Você pode confirmar isso substituindo aExecStart=
linha em seu serviço por:Se o
mailx
caminho não estiver listado, você pode definir explicitamente com umaEnvironment=
diretiva.Se essas dicas explícitas não resolverem seu problema, verifique as perguntas frequentes no link acima para obter mais possibilidades.
Eu uso
msmtp
ebsd-mailx
no Ubuntu 18.04 para permitirunattended-upgrades
o envio de atualizações por e-mail. Acho que passei pelo mesmo problema que você. Eu configureimsmtp
e pude enviar e-mail usandomailx
a linha de comando.unattended-upgrades
também me enviaria um e-mail se eu mesmo o executasse na linha de comando, mas seunattended-upgrades
fosse executado automaticamente, não receberia nenhum e-mail. Olhando nos logs de/var/log/msmtp/msmtp.log
vi:Portanto, há um problema ao definir o arquivo
From header
. Mergulhando nisso, parece que ofrom
endereço de e-mail usado porunattended-upgrades
padrão éroot
, mas você mesmo pode definir isso/etc/apt/apt.conf.d/50unattended-upgrades
adicionandoUnattended-Upgrade::Sender "<EMAIL_ADDRESS>";
. Isso resolveu para mim.