systemdから通知を送信する


0

私が書いたスクリプトの最後に、それがいつ終わるかを知るために通知を送りたいのです。スクリプトの内容は、通知部分以外は重要ではありません。

これがスクリプトの重要な部分です。

#!/bin/bash

USER=<username>
USERID=`id -u $USER`

sudo -u $USER bash -c "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$USERID/bus notify-send -t 5000 -u normal -i /usr/share/icons/Adwaita/32x32/devices/drive-removable-media.png 'Ah! the element of surprise'"

私の端末から実行するとうまくいきます。

でサービスファイルを作成しました /etc/systemd/system 以下の内容で:

[Unit]
Description=Test notification
Requires=home.mount
After=home.mount

[Service]
ExecStart=/home/alexis/Personnalisation/Scripts/test.notification.sh
Type=oneshot

[Install]
WantedBy=graphical.target

実行したとき sudo systemctl start test.notification、うまくいきます。

systemdを実行した後に実行すると問題が発生します。 systemd enable test.notification

スクリプトに他のものを追加すれば、それらは完了です。

私のサービスの説明は間違っていますか? 通知命令に何か欠落していますか?


おそらくそれはあなたがログインする前に終了しますか?
grawity

その単純な例では、そうなるかもしれません。しかし、私が監視したいスクリプトの場合、ドライブがマウントされるまで待機します。このドライブは手動でマウントされています。
A.D.

回答:


1

問題は、systemdが最小限の環境で動作し、スクリプトの実行中にすべてのenvvarが認識されるわけではないことです。それを機能させるために、私は変更します bash によって /bin/bash

私は環境なしでスクリプトを実行することによって何が悪いのかを見つけました:

env -i /path/to/script

次のエラーが返されました。

sudo:bash:コマンドが見つかりません

このエラーは一目瞭然で、問題の発見に役立ちました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.