Cron 作业不工作

Cron 作业不工作

我在 有一个脚本~/.sst/cmd.sh。它会在创建日期文件夹层次结构后截取屏幕截图并保存。内容如下:

#!/bin/sh
mkdir -p --mode=0755 /home/username/.sst/rslt/$(date +%Y)/$(date +%m)/$(date +%d)/$(date +%H)
scrot '/home/username/.sst/rslt/%Y/%m/%d/%H/%M%S.png'

然后我将其设置为 cron,每分钟运行一次。以下是$ crontab -l

* * * * * /home/username/.sst/cmd.sh

cron 运行没有问题。我获得了创建的文件夹层次结构,但目标位置没有屏幕截图。这可能是什么问题?

当从 CLI 手动运行脚本时,它会运行并生成屏幕截图。

我也尝试将 cron 放在 root 的 crontab 上。没有成功。

答案1

您需要指定 X DISPLAY。您可以在脚本中执行此操作。

修改脚本如下:

#!/bin/sh
mkdir -p --mode=0755 /home/username/.sst/rslt/$(date +%Y)/$(date +%m)/$(date +%d)/$(date +%H)
export DISPLAY=:0 && scrot '/home/username/.sst/rslt/%Y/%m/%d/%H/%M%S.png'

上述显示规范假设屏幕“:0”是您的活动 X DISPLAY owned by you(由运行 crontab 的用户拥有)。

有多种方法可以指定 DISPLAY。您可以使用第三行:

env DISPLAY=:0 scrot '/home/username/.sst/rslt/%Y/%m/%d/%H/%M%S.png'

或者,你可以使用多种变体之一来调用你的原始脚本,包括:

* * * * * env DISPLAY=:0 /home/username/.sst/cmd.sh

您可以用两行中的/home/username变量替换:userhome

username=`whoami`
userhome=`egrep "^$username:" /etc/passwd | awk -F: '{print $6}'`

相关内容