2

Я хочу получать одно и то же изображение (с веб-сайта) каждые x минут, чтобы в конце концов сделать видео с интервальной съемкой.

Мои проблемы:

  • настройка графика, чтобы захватить изображение и
  • сохранение изображения с указанием времени / даты как части имени файла.

Будет ли лучше использовать что-то вроде Python?

1 ответ1

7

Давайте использовать ваш аватар например (сохранить в /opt/download-avatar)

#!/bin/bash
URL="https://www.gravatar.com/avatar/554f043fa658cba9bbc2ee4c6d4e052d?d=identicon"
timestamp=$(date +%F_%T);
wget "$URL" -O "${timestamp}.png"

Примечание: может быть лучше сохранить имена файлов в секундах от отметки времени эпохи timestamp=$(date +%s)

Создайте задание cron для запуска каждые 5 минут (сохраните в /etc/cron.d/timelapse-avatar)

#!/bin/sh
*/5 * * * * /opt/download-avatar

Сделайте скрипты исполняемыми

chmod +x /opt/download-avatar
sudo chmod 755 /etc/cron.d/timelapse-avatar

Если вы не хотите использовать cron просто (сохраните в ~/start-timelapse)

#!/bin/bash
input="$1"
URL="https://www.gravatar.com/avatar/554f043fa658cba9bbc2ee4c6d4e052d?d=identicon"

if [ -z "$input" ]; then
  echo "USAGE: $0 [interval in minutes]" 
  exit 1
else
  interval=$((60*input));
fi

while [ 0 = 0 ]; do
  timestamp=$(date +%s)
  wget "$URL" -O "${timestamp}.png"
  echo "Sleeping for $input minutes"
  sleep "$interval"
done;

Сделать исполняемым и запустить с 7-минутными интервалами

chmod +x ~/start-timelapse
cd ~
./start-timelapse 7

ОБНОВИТЬ:

Спасибо, slhck.

Найджел, по умолчанию cron запускается от имени пользователя root . Не относящийся к этому вопросу, но технически он работает как "специальный пользователь", неинтерактивно, без переменных среды, таких как $PATH , без идентификатора сеанса dbus , без идентификатора сеанса X и т.д.

~/ является сокращением для домашнего каталога пользователя (также см. переменную среды $HOME). По умолчанию для пользователей это будет, например, /home/nigel но для пользователя root это /root поэтому, вероятно, cron сохраняет их в /root/pdm-5min . Вы можете использовать:

wget "$URL" -O "/home/nigel/pdm-5min/${timestamp}.png"

НО, файлы будут принадлежать пользователю root, поэтому nigel не сможет перемещать, удалять, редактировать их, если вы не предоставите себе разрешение от имени root (или через sudo)

Поэтому вы можете запустить cron от имени своего пользователя nigel.

#!/bin/sh
*/5 * * * * nigel /opt/download-avatar

Убедитесь, что каталог, в который вы сохраняете, существует, возможно, вы захотите добавить его непосредственно перед строкой wget :

mkdir -p /home/nigel/pdm-5min/

И наконец, будьте осторожны со своими " (цитаты). Используйте их так, чтобы переменные сохраняли пробелы (пробелы, табуляции и т.д.), Но убедитесь, что каждая одинарная или двойная кавычка имеет совпадающую, это не является обязательным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .