截图的 Cronjob 不起作用

截图的 Cronjob 不起作用

我正在尝试安排一个 Python 脚本,该脚本每分钟截取一次屏幕截图并将其存储在包含当天日期和时间的文件夹中。

import os
from datetime import datetime

path = "/home/user/Desktop/screenshots/"

today = datetime.today().strftime('%d-%m-%Y')
time = datetime.now().time().strftime('%H-%M-%S')

os.chdir(path)

try:
    os.mkdir(today)
except:
    pass

os.chdir(today)
os.system("scrot '" + time + ".png'")

我使用 cronjob 每分钟运行此脚本。在 crontab 文件中添加以下行:

* * * * * /usr/bin/python3 /home/user/Desktop/screenshots/screenshotTake.py

以下是输出到系统日志的内容:

Dec 14 11:34:02 username CRON[7668]: (user) CMD (/usr/bin/python3 /home/user/Desktop/screenshots/screenshotTake.py)
Dec 14 11:34:02 username CRON[7667]: (CRON) info (No MTA installed, discarding output)

现在,文件夹创建成功了,但没有保存屏幕截图。我尝试将一些文本记录到日志文件中,但同样,logs.txt 文件创建成功,但没有文本写入文件中。

我意识到创建一个 python 脚本并运行一个简单的 scrot 命令可能有点过头了,但我尝试使用 shell 脚本执行此操作,结果是一样的。创建了文件夹,但没有保存屏幕截图。还尝试使用 pyscreenshot 库,但结果相同。

答案1

我遇到了同样的问题。我发现问题出现是因为我们没有指定脚本应该使用的显示器。对于您的情况,我建议尝试在系统函数调用中输入 DISPLAY=:0。

os.system("DISPLAY=:0 scrot '" + time + ".png'")

我的脚本比你的短,但效果相同。我保存在 /bin/take-screenshot 中

#!/bin/sh
mkdir -p $HOME/.logger/$(date +'%Y%m%d')/screenshots
DISPLAY=:0 import -window root $HOME/.logger/$(date +'%Y%m%d')/screenshots/$(date +'%H%M').png

我的 cronjob 是

*/5 * * * 1-5 /bin/take-screenshot

参考:Scrot:在 Linux 中自动截取桌面 / 服务器截图的命令行工具

相关内容