为什么cronjob不执行feh命令

glo*_*243 5 linux shell cron

我构建了一个 cronjob,每十分钟从一个来源下载一张新图片,并使用 feh 将其设置为墙纸。文件已下载,但墙纸未更改。问题出在哪儿?crontab -e以用户身份执行命令,所以它应该像我运行该行一样 - 顺便说一句。

这是脚本

#!/bin/sh

#Filename
file="space-"$(date +%x_%H:%M:%S)

#save it 
wget http://rammb.cira.colostate.edu/ramsdis/online/images/latest_hi_res/himawari-8/full_disk_ahi_true_color.jpg -O /home/tim/Bilder/Wallpaper/$file -o /dev/null

#set background
feh --bg-max /home/tim/Bilder/Wallpaper/$file
Run Code Online (Sandbox Code Playgroud)

这是crontab -e用户应该更改的背景(又名我)

*/10 * * * * /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh
Run Code Online (Sandbox Code Playgroud)

在我的系统日志中,我发现了这些行

Jan 31 21:40:01 LinuxMint CRON[18209]: (tim) CMD (/bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh)
Jan 31 21:40:11 LinuxMint CRON[18204]: (CRON) info (No MTA installed, discarding output) 
Run Code Online (Sandbox Code Playgroud)

Gom*_*dor 6

不幸的是,没有足够强调 cron get 启动的环境进程非常简单,它只包含最重要的变量和值。您可以通过运行仅包含

#!/bin/bash

set > /tmp/myset.txt
Run Code Online (Sandbox Code Playgroud)

您将看到那里没有设置运行任何基于 X 的应用程序所需的 DISPLAY 变量(除了极少数例外,我们只使用那种)。

你必须把类似的东西

export DISPLAY=:0.0
Run Code Online (Sandbox Code Playgroud)

进入您的脚本并获得更好的赔率。


Gau*_*ier 5

要按照说明完成 Gombai 的回答:

运行env | grep -i display并检查 的值DISPLAY。很可能是:0.0,或者:0

相应地修改你的 crontab:

*/10 * * * * DISPLAY=:0 /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh
Run Code Online (Sandbox Code Playgroud)