Допустим, необходимо чтобы в рабочее время каждый час на экран выскакивало окошко с напоминанием сделать разминку.Как это сделать?
1. Убеждаемся что установлен пакет zenity, отображающий различные сообщения через GTK+ (он входит в зависимости gnome-desktop-environment, но все же ...)
sudo aptitute install zenity
2. Добавляем в crontab строчку, вызывающую желаемое напоминание с проверкой на наличие незакрытого предыдущего:
crontab -e
добавляем:
0 10-16 * * * ps -A |grep gdialog || env DISPLAY=:0
LANG=ru_RU.UTF-8 gdialog --title "Напоминание" --infobox "Разминка\!\!\!\n`LANG=ru_RU.UTF-8 date`"
3. Получаем желаемый результат каждую 0 минуту с 10 до 16 часов.
URL:
Обсуждается: http://www.opennet.me/tips/info/2385.shtml
Do not grep ps output!
Вы неправыВ данном случае, при проверке только по имени команды (gdialog) grep по выходу ps -A вполне допустим.
Если же есть желание включить в проверку аргументы командной строки, то выход pgrep все равно придется фильтровать - при запуске из cron он не распознает команду запуска себя в списке процессов.рабочие примеры для crontab с более точным определением наличия незакрытого предыдущего напоминания:
0 10-16 * * * export LANG=ru_RU.UTF-8; ps -Af | grep -v grep | grep gdialog.*Напоминание.*Разминка || DISPLAY=:0 gdialog --title "Напоминание" --infobox "Разминка\!\!\!\n`date`"
0 10-16 * * * export LANG=ru_RU.UTF-8; pgrep -fl gdialog.*Напоминание.*Разминка | grep -v pgrep || DISPLAY=:0 gdialog --title "Напоминание" --infobox "Разминка\!\!\!\n`date`"
> Do not grep ps output!
Do not use english without need
Ещё через libnotify красиво получается, только такое сообщение легче проигнорировать.
Для решения задачи описанной в статье - в Debian и его gnome(ведь gnome стоит раз gdialog используют? 8-)) нужно зайти в настройки клавиатуры и посмотреть на вкладку "перерыв в работе" - для разминки всяко лучше подходит
DISPLAY=:0.0 /usr/bin/notify-send -u normal -i evolution "Важное сообщение" "Час прошёл!"
мне такое решение больше нравится.
а это ещё зачем?
ps -A |grep gdialog || env DISPLAY=:0
видимо чтоб не спамить самого себя, если первое сообщение не закрыто, следующее не появится