test.sh:/usr/bin/notify-send "test"
次のように動作します:bash ~/Documents/test.sh
しかし、crontabは通知を表示しません。どうして?
*/1 * * * * bash ~/Documents/test.sh
CronからGUI関連アプリを実行するには、いくつかのデスクトップ環境変数をエクスポートする必要があります。以下の解決策は、 この回答に基づいて 詳細が提供されている場所です。
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での動作は次のとおりです。
以下に、SSHを介した同じスクリプトの実装を示します。 sshを介してUbuntu 16.04サーバーに接続した後、新しいターミナルでスクリプト(.sh)ファイルを実行する方法
詳細な説明を以下に示します。 再起動時にpythonスクリプトを実行するcronジョブが機能しない 。
そしてもう1つの例: xrandrとcronジョブで明るさを調整
Cronと通常のユーザーの環境は異なる場合があります。
Cronでスクリプトを使用する場合は、スクリプトへのフルパスを配置する方が適切です。