MailX は Systemd サービスとして実行しても電子メールを送信しません。

MailX は Systemd サービスとして実行しても電子メールを送信しません。

私のアーチLinuxシステム上のフォルダからclamavスキャンを実行し、結果を電子メールで送信するシェルスクリプトがあります。コードは次のとおりです。

/usr/bin/clamscan -r -i /path/to/folder | /usr/bin/mailx -A gmail -s "Clam Scan Results $(/usr/bin/date +%F)" [email protected]

/etc/mailrc上記のコード行は、bashコマンドラインから実行し、職場で設定されたアカウントを確認し、電子メールを受信すると正常に機能します。しかし、私はスケジュールに従って実行したいと思い、〜/bin/virusscan.shというスクリプトを呼び出すシステムサービスデバイスと、毎晩午前2時にスクリプトを実行するシステムタイマーデバイスを設定しました。パイプの後ろのmailx部分は常に報告します。... email not sent

SystemDがスクリプトを実行する方法に大きな違いはありますか?

/usr/lib/systemd/system/virusscan.service

[Unit]
Description=Daily virus scan

[Service]
Type=simple
ExecStart=/home/username/bin/virusscan.sh

[Install]
WantedBy=multi-user.target

/usr/lib/systemd/system/virusscan.timer

[Unit]
Description=Execute virus scan daily at 2 AM

[Timer]
OnCalendar=*-*-* 02:00:00
Unit=virusscan.service

[Install]
WantedBy=multi-user.target

その後、サービスをすぐに実行してテストできます。

sudo systemctl start virusscan 

サービスの実行時の状態は次のとおりです。

virusscan.service - Daily virus scan
   Loaded: loaded (/usr/lib/systemd/system/virusscan.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2016-10-04 11:54:39 PDT; 11s ago
 Main PID: 29915 (virusscan.sh)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/virusscan.service
           ├─29915 /bin/sh /home/username/bin/virusscan.sh
           ├─29920 /usr/bin/clamscan -r -i /path/to/folder/
           └─29921 /usr/bin/mailx -A gmail -s Clam Scan Results 2016-10-04 [email protected]

Oct 04 11:54:39 hurricane systemd[1]: Started Daily virus scan.

SystemDはスクリプトのコード行を別々のプロセスに分割し、メッセージの件名行と見積もられた文字列を展開し、引用符を削除するようです。それが問題かもしれません。たぶん、私は正しくエスケープするだけです...そして、サービスユニットの実行が完了したら、常に最後に次の行があります...

Oct 04 11:55:01 hurricane virusscan.sh[29915]: ... message not sent

ベストアンサー1

~によるとアーチスウィキmailx ブランチと systemd は、スクリプトの終了時に基本プロセスを終了します。 mailx 呼び出しに -v を追加するとフォークが防止されるように見えますが、systemd で動作させるより正しい方法は、mailx の引数に -Ssendwait を追加することです。

おすすめ記事