воскресенье, 31 марта 2019 г.

Исключение запуска задания, которое осуществляется при входе пользователя в систему после её старта, в субботу и воскресенье


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


Пояснение алгоритма

Получение информации осуществляется в папку Обмен жёсткого диска.

Имея представление о постоянной "забывчивости" пользователей и их привычке "случайно" нажимать не на те кнопки, в данный скрипт запуска пришлось включить защиту "от дурака". При этом проверяется наличие/отсутствие целевой папки. Если папка на месте, то не предпринимается никаких действий и после проверки производится получение сообщений, которые могли скопиться за период отсутствия пользователя в сети. После этого последовательно стартуют клиенты синхронизации Dropbox и Диска Яндекс.

#!/bin/bash
obmen=/home/minter/Обмен
scripts=/home/minter/.scripts
sleep 30
if [ -d $obmen ]; then
  :
else
  mkdir /home/minter/Обмен
fi
$scripts/user-1/get-old-messages.sh
$scripts/dropboxme.sh
sleep 20
yandex-disk start
exit


Сначала был "придуман", условно говоря, старый вариант, который будет назван вариантом 1. Впоследствии возникло другое решение, который будет назван вариантом 2. Далее приводятся оба варианта.

Проверка условия дня недели

В случае субботы и воскресенья необходимо предотвратить запуск описанного выше скрипта.

После некоторого периода размышлений было принято решение оттолкнуться от результат запроса дня недели date +%u  Результатом такого запроса будут 1, 2, 3, 4, 5, 6, 7, где 1 соответствует первому дню недели, то есть понедельнику.

В результате скрипту получения материала назначено имя start3.sh, который будет запущен только после того как два предыдущих с именами start1.sh и start2.sh будут отработаны.

Скрипт start1.sh смотрит на соответствие дня недели субботе. Если получен результат "не суббота", то передаётся команда на запуск start2.sh.

Скрипт start2.sh выполняет аналогичное действие – проверяет на соответствие дня недели воскресенью. Если получен результат "не воскресенье", то передаётся команда на запуск start3.sh.

Если получен результат "суббота" или "воскресенье"), то пользователю выводится на экран сообщение, которое будет отображаться до тех пор, пока не будет нажата кнопка OK:




Что получилось в итоге

Листинги start1.sh и start2.sh приводятся ниже. Символы \n в строке zenity означают переход на новую строку.

Вариант 1

#!/bin/bash
day=`date +%u`
scripts=/home/minter/.scripts
if [ $day -eq 6 ];
then
zenity --width=300 --height=50 --info --text "Сегодня суббота.\n\nПолучение материала не осуществляется.\n\nПолучение можно осуществить вручную,\nнажав на кнопку верхней панели\n 'Получить информацию'\n\nНе нажимайте, если Интернет отсутствует." 2>/dev/null
:
else
$scripts/start2.sh
fi
exit

#!/bin/bash
day=`date +%u`
scripts=/home/minter/.scripts
if [ $day -eq 7 ];
then
zenity --width=300 --height=50 --info --text "Сегодня воскресенье.\n\nПолучение материала не осуществляется.\n\nПолучение можно осуществить вручную,\nнажав на кнопку верхней панели\n 'Получить информацию'\n\nНе нажимайте, если Интернет отсутствует." 2>/dev/null
:
else
$scripts/start3.sh
fi
exit

Под start3.sh можно понимать или самый первый скрипт, приводимый в начале публикации, или специально написанный для такого случая аналогичный скрипт на bash с "урезанным" функционалом.

В будние дни до завершения работы start3.sh продолжают работать start1.sh и start2.sh  Это связано с тем, что start1.sh и start2.sh не могут завершить свою работу по команде exit до тех пор, пока все перечисленные в них команды не будут отработаны. start1.sh и start2.sh занимают примерно 3,1 Мб оперативной памяти каждый. Если это сильно "напрягает", то можно воспользоваться вариантом 2.

Вариант 2

Используется проверка сравнения полученного дня недели установленному значению. Если номер дня недели 5 и меньше, то есть будние дни, то запускается скрипт скрипт получения материала start3.sh (см. выше). Если номер для недели 6 или 7 (суббота или воскресенье), то запускается script2.sh, который уведомляет о том, что данный день недели суббота или воскресенье.

#!/bin/bash
scripts=/home/minter/.scripts
a=`date +%u`
b=5
if [ $a -le $b ]
then
#zenity --width=150 --height=50 --info --text "\nСегодня – будний день." 2>/dev/null
$scripts/start3.sh
else
$scripts/start2.sh
fi
exit

#!/bin/bash
day=`date +%u`
if [ $day -eq 6 ];
then
zenity --width=300 --height=50 --info --text "Сегодня – суббота.\nПолучение материала не осуществляется.\n\nПолучение можно осуществить вручную,\nнажав на кнопку верхней панели\n 'Получить информацию'\n\nНе нажимайте, если Интернет отсутствует." 2>/dev/null
else
:
fi
if [ $day -eq 7 ];
then
zenity --width=300 --height=50 --info --text "Сегодня – воскресенье.\nПолучение материала не осуществляется.\n\nПолучение можно осуществить вручную,\nнажав на кнопку верхней панели\n 'Получить информацию'\n\nНе нажимайте, если Интернет отсутствует." 2>/dev/null
else
:
fi
exit

Комментариев нет:

Отправить комментарий