Я пытаюсь запланировать сценарий 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'")
I Я использую 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 может оказаться излишним, но я попытался сделать это с помощью сценария оболочки, и результат был таким же. Папка создается, но скриншоты не сохраняются. Также пробовал использовать библиотеку pyscreenshot, но результат тот же.
У меня та же проблема. Я считаю, что проблема возникла из-за того, что мы не указываем дисплей, который должен использовать сценарий. В вашем случае я предлагаю попробовать указать 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