我在 有一个脚本~/.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}'`