Linux

Crontab 不執行改變背景的腳本

  • February 5, 2019

我有這個腳本可以從我的 gnome 桌面更改背景和螢幕保護程序。手動執行時工作正常,但是當我將它放在 cron 中時它不會執行它。該文件是可執行的。

我使用crontab -e添加了 cron 作業。

這是腳本:

#!/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 目錄*/home/myuser/bin*中,該目錄已添加到 PATH 變數中。

crontab -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 不執行我的腳本?我做錯了什麼?

問題似乎是crontab 中的環境未設置正確的PATH,因此從未找到該腳本。使用者的 shell 初始化文件不是由 cron 執行的,因此在PATH其中設置 或其他變數對於 cron 作業是沒有用的。

這可以通過多種方式解決。

一種是PATH在 crontab 中簡單地設置(以及任何其他需要特定值的變數)(這也會更改腳本和crontab 中所有其他作業的這些變數的值):

PATH=/home/myuser/bin:$PATH

另一種是使用絕對路徑執行腳本:

* * * * * /home/myuser/bin/change_background

PATH如果執行的其他作業需要為腳本本身正在使用的特定事物單獨修改變數(腳本本身將在PATH早期設置,或者以例如開始),則這可能更可取env PATH=... /some/path/program

引用自:https://unix.stackexchange.com/questions/498906