私のGNOMEデスクトップで壁紙とスクリーンセーバーを変更するスクリプトがあります。手動で実行するとうまくいきますが、cronに入れても実行されません。ファイルが実行可能です。
クローンタスクを追加しました。クローンタップ-e。
スクリプトは次のとおりです。
#!/bin/bash
# change_background - Change desktop background and lockscreen background randomly
# Export DBUS_SESSION_BUS_ADDRESS environment variable
euid=$(id --real --user)
pid=$(pgrep --euid $euid gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ|cut -d= -f2-)
# Wallpapers directory
dir="/home/myuser/Pictures/Wallpapers"
# Wallpaper and screensaver files
background=$(ls $dir/* | shuf -n1)
screensaver=$(ls $dir/* | shuf -n1)
# Set the wallpaper and screensaver
gsettings set org.gnome.desktop.background picture-uri file://$background
gsettings set org.gnome.desktop.screensaver picture-uri file://$screensaver
私のスクリプトは私のbinディレクトリにあります。/ホーム/myuser/空PATH変数に追加されます。
クローンタップ-l出力:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command
#
# --- Change background every minute --- #
#
* * * * * change_background
#
# --- ------------------------------ --- #
私の質問は、cronが私のスクリプトを実行しないのはなぜですか?私は何が間違っていましたか?
ベストアンサー1
質問あるようだcrontabの環境が正しく設定されていないため、PATH
スクリプトが見つかりません。ユーザーのシェル初期化ファイルはcronによって実行されないため、そのファイルPATH
の設定やその他の変数はcronジョブには役に立ちません。
この問題はいくつかの方法で解決できます。
PATH
1つは、crontabで単に設定(および特定の値を必要とする他の変数)することです(これにより、スクリプトの変数の値も変更されます)。他のすべての職業クローンタブから):
PATH=/home/myuser/bin:$PATH
もう一つは、絶対パスを使用してスクリプトを実行することです。
* * * * * /home/myuser/bin/change_background
実行中の他のタスクでPATH
スクリプト自体が使用する特定の項目に対して変数を個別に変更する必要がある場合(これは、PATH
スクリプト自体で最初に設定されるか、たとえばで始まる)、env PATH=... /some/path/program
より良いオプションです。