- +

Автор: shteinx Тема: Запуск команды на определенный период времени  (Прочитано 3254 раз)

Оффлайн shteinx

  • Начинающий
  • *
  • Сообщений: 28
  • Репутация: +1/-0
  • Хубунту 13.10
    • Просмотр профиля
Здравствуйте коллеги! На работе нужно запускать программу снятия изображения рабочего стола на период рабочего дня, то есть с 9:00 до 18:00. Нашел отличную программу scrot, которая реализует необходимый функционал командой
while true; do scrot -d 60 '%Y-%m-%d-%H-%M-%S_WS.png' -e 'mv $f ~/Screen/'; done
Таким образом 1 раз в минуту (60 секунд) делается скриншот и записывается в папку ~/Screen/
Вопрос - как осуществить планировку запуска?
На ум приходят идеи:
1. Заменить условие true в цикле на время с 9 до 18 часов. Как это сделать не имею ни малейшего понятия. ABS guide поковырял, но ничего так и не понял. Для моей задачи нужен минимум, а чтобы его найти придется осилить максимум.
2. Запускать через cron, но тогда нужно будет как-то завершать процесс в 18 часов и нет защиты от возможной перезагрузки компа во время рабочего дня.

Надеюсь на ваши здравые идеи!

Оффлайн destruct™

  • Завсегдатай
  • ***
  • Сообщений: 222
  • Репутация: +25/-0
  • Xubuntu 14.04 x64
    • Просмотр профиля
просто читаем ман к cron и создаём расписание запуска ежечасно с 9 до 18
0 9-18/1 * * 1 /путь_к_скрипту/скрипт
сам скрипт /*читаем ман к scrot*/  (без -d 60) настраиваем на одиночный снимок примерно так
#!/bin/bash
scrot '%Y-%m-%d-%H-%M-%S_WS.png' -e 'mv $f ~/Screen/'
не забываем сделать исполняемым)
углубившись можно настроить выполнение только по рабочим дням и пакетировать снимки в папки по дням/неделям/отдельно взятой машине/пользователе и т.д. и т.п. мануал в помощь)

Оффлайн shteinx

  • Начинающий
  • *
  • Сообщений: 28
  • Репутация: +1/-0
  • Хубунту 13.10
    • Просмотр профиля
Маны к cron'у поизучал. Создал crontab командой
 crontab -e 
для текущего пользователя с содержанием
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
* * * * * /home/alexandr/scripts/shot.sh
* * * * * cp /home/alexandr/6.mkv /home/alexandr/vid/
с двумя заданиями специально для контроля cron'а что он работает, создал скрипт
#!/bin/bash
scrot '%Y-%m-%d_%H-%M-%S_WS11.png' -e 'mv $f /home/alexandr/Screen/'
сохранил его в /home/alexandr/scripts/shot.sh
сделал исполняемым
sudo chmod +x shot.sh
Crontab сохранился корректно, при вводе команды
crontab -l
выводится содержимое моего расписания.
При работе cron'а строка
* * * * * /home/alexandr/scripts/shot.sh
не работает, а
* * * * * cp /home/alexandr/6.mkv /home/alexandr/vid/
работает исправно.
При запуске скрипта вручную работает идеально, а с cron'ом не хочет!
Все уже перепробовал, незнаю где собака порылась.

Оффлайн destruct™

  • Завсегдатай
  • ***
  • Сообщений: 222
  • Репутация: +25/-0
  • Xubuntu 14.04 x64
    • Просмотр профиля
а если
SHELL=/bin/bash
указать? и/или попробовать
* * * * * sh /home/alexandr/scripts/shot.sh
?

З.Ы. зачем отдельным скриптом? и каждую минуту запускать? тотальная слежка?))) если можно его конкретно в cron настроить? есть даж пример разжеванный
« Последнее редактирование: Апрель 07, 2014, 20:38:14 от destruct™ »

Оффлайн shteinx

  • Начинающий
  • *
  • Сообщений: 28
  • Репутация: +1/-0
  • Хубунту 13.10
    • Просмотр профиля
Обо всем по порядку:
1) Я пока не сильно понимаю как работают команды в интерпретаторе. Не знаю где лучше просто указать команду с параметрами, а где написать скрипт. Учиться, учиться и еще раз учиться.
2) Тотальная слежка!? Есть недобросовестные сотрудники, есть новые менеджеры продаж, которые предпочитают искать новую работу на новой работе и получать за это деньги. Скорее не слежка, а понимание на какой вид деятельности преимущественно уходит рабочее время.

Оффлайн shteinx

  • Начинающий
  • *
  • Сообщений: 28
  • Репутация: +1/-0
  • Хубунту 13.10
    • Просмотр профиля
В том то и дело, что насколько ни разжеван пример - все равно не работает.
Знаю, что где-то у меня косяк, но где?
SHELL=/bin/bash
MAILTO=alexandr
HOME=/home/alexandr
* * * * * scrot
По идее сейчас скриншот должен появляться в папке ~/
,но ничего не появляется.
Не подскажите как сделать вывод в лог ошибок или что-то нечто подобное?

Оффлайн destruct™

  • Завсегдатай
  • ***
  • Сообщений: 222
  • Репутация: +25/-0
  • Xubuntu 14.04 x64
    • Просмотр профиля
вообщем скрипт такой
Код: shot.sh [Выделить]
#!/bin/sh 
# Тут можно временно бросить файл)
HOME=/tmp
# Дисплей указываем чтоб небыло лишних вопросов)
export DISPLAY=:0.0
# Собственно что нам надо)
scrot '%Y-%m-%d_%H-%M-%S_WS11.png' -e 'mv $f /home/alexandr/Screen/'
exit 0


Код: crontab [Выделить]
SHELL=/bin/bash
MAILTO=alexandr
* * * * * /home/alexandr/scripts/shot.sh


Для ведения лога убираем # перед строкой
Код: /etc/rsyslog.conf [Выделить]
cron.* /var/log/cron.log
и перезапускаем
sudo /etc/init.d/rsyslog restart
смотрим /var/log/cron.log

Оффлайн shteinx

  • Начинающий
  • *
  • Сообщений: 28
  • Репутация: +1/-0
  • Хубунту 13.10
    • Просмотр профиля
Ваш скрипт сразу заработал, в логах сообщения вида:
Apr  8 08:22:24 piano anacron[1129]: Anacron 2.3 started on 2014-04-08
Apr  8 08:22:24 piano cron[1062]: (CRON) INFO (pidfile fd = 3)
Apr  8 08:22:24 piano cron[1163]: (CRON) STARTUP (fork ok)
Apr  8 08:22:24 piano anacron[1129]: Normal exit (0 jobs run)
Apr  8 08:22:24 piano cron[1163]: (CRON) INFO (Running @reboot jobs)
Apr  8 08:22:28 piano anacron[1944]: Anacron 2.3 started on 2014-04-08
Apr  8 08:22:28 piano anacron[1944]: Normal exit (0 jobs run)
Apr  8 08:23:01 piano CRON[2331]: (root) CMD (/home/alexandr/scripts/shot)
Apr  8 08:23:01 piano CRON[2329]: (CRON) info (No MTA installed, discarding output)
Apr  8 08:23:01 piano CRON[2333]: (alexandr) CMD (/home/alexandr/scripts/shot.sh)
Apr  8 08:24:01 piano CRON[2345]: (root) CMD (/home/alexandr/scripts/shot)
Apr  8 08:24:01 piano CRON[2343]: (CRON) info (No MTA installed, discarding output)
Apr  8 08:24:01 piano CRON[2347]: (alexandr) CMD (/home/alexandr/scripts/shot.sh)
Apr  8 08:25:01 piano CRON[2354]: (root) CMD (/home/alexandr/scripts/shot)
Apr  8 08:25:01 piano CRON[2355]: (alexandr) CMD (/home/alexandr/scripts/shot.sh)
Apr  8 08:25:01 piano CRON[2352]: (CRON) info (No MTA installed, discarding output)

И далее в этом же духе.
Не понял только для чего
HOME=/tmp
export DISPLAY=:0.0
exit 0
можно поподробнее?
Спасибо за грамотные ответы!!!

Оффлайн destruct™

  • Завсегдатай
  • ***
  • Сообщений: 222
  • Репутация: +25/-0
  • Xubuntu 14.04 x64
    • Просмотр профиля
я же вроде откоменнтировал строки)
HOME=/tmp указана для того чтоб скрипт знал где создавать временный файл
export DISPLAY=:0.0 задаёт экран с которого снимается скриншот (ибо cron понятия не имеет какой и где экран и от этого при запуске scrot он отваливается)
exit 0 - эту строку geany сам добавил)

Оффлайн shteinx

  • Начинающий
  • *
  • Сообщений: 28
  • Репутация: +1/-0
  • Хубунту 13.10
    • Просмотр профиля
Вот спасибо! В интернете всюду пишут, что cron имеет свои переменные окружения, а какие переменные - не уточняют. По опыту знаю, самые простые вещи на самом деле самые сложные. О них не говорят, типа все и так должны это знать. А копни поглубже - единицы могут внятно ответить по делу!!!