crontab 不执行更改背景的脚本

crontab 不执行更改背景的脚本

我有这个脚本可以从我的 gnome 桌面更改背景和屏幕保护程序。手动执行时工作正常,但当我将其放入 cron 时,它不会执行。该文件是可执行的。

我添加了 cron 作业crontab -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 目录中/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 不执行我的脚本?我做错了什么?

答案1

问题似乎已经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),那么这可能是更好的选择。

答案2

尝试 :

   * * * * * env DISPLAY=:0 /path/to/bash/script.sh 

相关内容