systemd、再起動後に電子メールを送信する

systemd、再起動後に電子メールを送信する

私はsystemdを使って次のスクリプトを使ってサービスを自動的に起動しています。 (下記参照)

サービスが開始される前に電子メールを送信しようとしています(コメント付き行)。

行末のリンク/home/vincent/wintergreen/service_files/IB_restart_emailは電子メールの内容です。ここで述べたように段落7から。

Unit]
Description=Manages an instance of IBController

[Service]
Type=forking
User=vincent
Group=vincent
ExecStart=/bin/bash -c "cd /opt/IBController && bash IBControllerStart.sh -inline && sleep 10"
# ExecStartPre=/usr/bin/mail -s "Restarting TWS" [email protected] < /home/vincent/wintergreen/service_files/IB_restart_email 
Environment=DISPLAY=:0.0
KillMode=control-group
TimeoutSec=0
Restart=always

[Install]
WantedBy=graphical.target

ただし、この行はエラーを返しますmail: Cannot parse address <' (while expanding <'): Malformed email address。 (journalctlを開くとエラーメッセージが表示されます)

このコマンドは、シェルで直接使用する場合に機能します。システムファイルでメール転送回線を使用するときにこれを機能させる方法を知っている人はいますか?

PS:私はpostfix電子メールを使って送信します。

ベストアンサー1

で述べたように、man systemd.servicesystemdは "<"を含まないシェル構文を制限的にサポートしています。したがって、この文字は "mail"コマンドで設定され、このエラーが発生します。

自動再起動はサービスのクラッシュによって発生する可能性があるため、電子メールに最も興味があるようです。

これを行うには、このOnFailure=ディレクティブがより良い選択です。デバイスがエラー状態に入ったときにアクティブになるデバイスのスペースで区切られたリストを提供するには、それを使用します。

この問題を解決するための既製のソリューションはすでにあります。これサービスが失敗すると、サービスの「ステータス」出力(一部のログ出力を含む)が電子メールで送信されます。

WorkingDirectory=また、inの代わりにこのディレクティブを使用することを検討してくださいExecStart=

アプリケーションの実行の一部として「スリープ10」が必要な理由は不明です。

おすすめ記事