web-dev-qa-db-ja.com

crontabによってトリガーされた通知送信メッセージを表示するにはどうすればよいですか?

test.sh:/usr/bin/notify-send "test"

次のように動作します:bash ~/Documents/test.sh

しかし、crontabは通知を表示しません。どうして?

*/1 * * * * bash ~/Documents/test.sh

4
membersound

CronからGUI関連アプリを実行するには、いくつかのデスクトップ環境変数をエクスポートする必要があります。以下の解決策は、 この回答に基づいて 詳細が提供されている場所です。

Gnomeを使用してUbuntu 16.04、17.10、18.04およびその他のUbuntuディストリビューションでcrontabからGUI関連アプリケーションを起動する方法

デスクトップ環境変数をエクスポートし、アプリケーションを起動する起動スクリプトを作成します。 gui-launcherと呼びましょう。その内容は(referencs: [1][2] および [3]):

#!/bin/bash -e

# NAME: gui-launcher

# Check whether the user is logged-in
while [ -z "$(pgrep gnome-session -n -U $UID)" ]; do sleep 3; done

# Export the current desktop session environment variables
export $(xargs -0 -a "/proc/$(pgrep gnome-session -n -U $UID)/environ")

# Execute the input command
Nohup "$@" >/dev/null 2>&1 &

exit 0
  • 他のデスクトップ環境の場合、この部分のgnome-sessionを、使用中のDEのプロセスの名前(mate-sessionなど)で$(pgrep gnome-session -n -U $UID)に変更します。ほとんどのUbuntu DEのリストは ここに表示 です。同じスクリプトのLubuntu実装- ここ 。このスクリプトを使用して、現在のユーザーのデスクトップセッションでTTYまたはSSHセッションからGUIアプリを起動できます。
  • ファイルを実行可能にします:chmod +x gui-launcher
  • ロックされた画面を含め、ユーザーがログインするまでスクリプトは機能します。
  • ルートとしてスクリプトを変更および実行しないでください。システムに有害な可能性があります!

次に、crontab内で次のように使用します。

*/1 * * * * /full/path/to/gui-launcher "/full/path/to/the-targer-application"

Wayland上のUbuntu 17.10での動作は次のとおりです。

enter image description here


4
pa4080

Cronと通常のユーザーの環境は異なる場合があります。

Cronでスクリプトを使用する場合は、スクリプトへのフルパスを配置する方が適切です。

1
Anton Shevchuk