無人アップグレードはSystemdで実行するときにmailxを使用しません。

無人アップグレードはSystemdで実行するときにmailxを使用しません。

unattended-upgradesRaspbian()を実行しているRaspbian GNU/Linux 9.4 (stretch)サーバーに設定しました。無人アップグレードバージョン:0.93.1+nmu1

更新は機能しますが、電子メールの報告に問題があります。レポートを送信するために使用したいですmailx。コマンドを使用してアップデートを実行すると、unattended-upgrade -v -dレポートが送信されます/root/.mailrc

unattended upgradesただし、Systemdタイマー()が実行されているときはapt-daily-upgrade.timer使用されませんmailx

存在する場合は、sendmailメールを送信するために使用されます。この場合、メッセージは送信されますが送信者はであり、root@hostnameそのメッセージはスパムとしてマークされます。

それ以外の場合は、sendmailログに次のエラーが表示されますapt-daily-upgrade

Cannot start "/usr/sbin/sendmail": executable not found (adjust *sendmail* variable)

タスクの開始方法によっては、他のメーラーが使用される理由を理解できません。

unattended-upgradesPythonプログラムを編集して強制的に使用しようとしました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

SENDMAIL_BINARY存在しないパスを指すように変数を変更したので、強制的にmailxunattended-upgrades(上記の使用試行のエラーは記録されsendmail続けます。)

systemdが自動的に実行されても強制的unattended upgradesに使用するにはどうすればよいですか?使用されるメールプログラムの違いが発生するのはなぜですか?mailx

編集する:

無人アップグレードを実行するためのシステムデバイスファイル:

[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

答え1

あなたの質問はFAQのバリエーションです。systemdで状況が異なるのはなぜですか?

利点の1つsystemdは、一貫した実行環境を提供することです。セキュリティとシンプルさのために、環境変数の設定は最小限に抑えられます。

関連文書systemd実行環境設定について詳しく説明します。

root設定がホームディレクトリにあると言われました。固定パスではなく探してman mailxいることを確認してください。~/.mailrc/root/.mailrc

このマニュアルでは、systemdこの変数が$HOMEディレクティブを使用する場合にのみ設定されることを示しています。サービスファイルをUser=共有していないがsystemdrootとしてジョブを実行したため、そのディレクティブを使用しなかったとしますUser=。したがって、これは問題の一部を説明できます。

$PATHまた、実行時に環境変数が目的のパスに設定されていないようですsystemdExecStart=サービスの行を次に置き換えると、これを確認できます。

 ExecStart=/bin/echo "My path is $PATH"

mailxパスがリストされていない場合は、Environment=ディレクティブを使用して明示的に設定できます。

これらの明確なヒントで問題が解決しない場合は、上記のFAQを確認してより多くの可能性を確認してください。

答え2

msmtpアップデートをEメールで受け取るためにUbuntu 18.04を使用しています。私はあなたと同じ問題に直面したと思います。私はそれを設定し、コマンドラインを使用して電子メールを送信できます。コマンドラインから直接実行すると電子メールも送信されますが、自動的に実行すると電子メールは受信されません。私が見たログを見ると、次のようになります。bsd-mailxunattended-upgradesmsmtpmailxunattended-upgradesunattended-upgrades/var/log/msmtp/msmtp.log

<DATE> host=<MY_SMTP_HOST> tls=on auth=on user=<MY_STMP_USERNAME> from=<MY_EMAIL_ADDRESS> recipients=<MY_EMAIL_ADDRESS> smtpstatus=550 smtpmsg='550 5.2.0 Mail format error: No domain in From header [1633]' errormsg='the server did not accept the mail' exitcode=EX_UNAVAILABLE

だから設定に何か問題があるのですFrom header。もう少し詳しく見てみると、デフォルトfromで使用されている電子メールアドレスが表示されますが、追加して自分でカスタマイズすることもできます。これは私のために問題を解決しました。unattended-upgradesroot/etc/apt/apt.conf.d/50unattended-upgradesUnattended-Upgrade::Sender "<EMAIL_ADDRESS>";

関連情報