Чтобы реализовать мониторинг времени простоя компьютера, нужно учитывать тот факт, что пользователь обычно работает с мышкой, поэтому будем анализировать ее активность.
Если мышь была не активной в течение N минут, сделаем вывод, что пользователь в настоящее время не работает с ПК. Всю статистику будем отправлять в Телеграмм.
Обращу Ваше внимание, операционная система семейства Linux, писать весь код будем в bash.
В консоли напишем:
sudo cat /dev/input/mouse0
и подвигаем мышкой — должны на экране терминала появиться символы.
Создадим папку Monitoring
sudo mkdir /var/monitoring
создадим файл input.sh
sudo nano /var/monitoring/input.sh
вставим текст:
#/bin/bash #####Время от которого начинается отсчет простоя (в секундах)####### inactive=10 ###TELEGRAM#### token= chat_id= text="Пользователь начал работу." ########НЕ ТРОГАТЬ!!!####### timeinactive=0 t=0 test= echo $(date +%s) > /var/monitoring/start.txt ###Сразу после запуска ПК, оповещение в телеграм не сработает, ###так как еще не установлено соединение с Интернет sleep 60 url="https://api.telegram.org/bot$token/sendMessage?chat_id=$chat_id&text=$text" curl -X POST "$url" 2 > /dev/null while :; do ####Параметр -n задает чуствительность движение мыши ####Параметр -st задает время чтение файла (1 секунда) ####Если убрать - цыкл while не начнет следующую итерацию read -n 5 -st 1 i</dev/input/mouse0 if [ "$i" = "$test" ]; then t=$[$t+1] if (( "$t" > "$inactive" )); then timeinactive=$[$timeinactive+1] echo "$timeinactive">/var/monitoring/timeinactive.txt fi else t=0 fi done &
Создадим файл input_stop.sh:
sudo nano /var/monitoring/input_stop.sh
вставим текст:
#!/bin/bash read timeinactive < /var/monitoring/timeinactive.txt read start < /var/monitoring/start.txt end=$(date +%s) timeall=$(($end-$start)) sall=$[$timeall%60] mall=$[$timeall/60%60] hall=$[$timeall/3600] if (( "$sall" < 10 )); then sall=0$sall fi if (( "$mall" < 10 )); then mall=0$mall fi if (( "$hall" < 10 )); then hall=0$hall fi sinactive=$[$timeinactive%60] minactive=$[$timeinactive/60%60] hinactive=$[$timeinactive/3600] if (( "$sinactive" < 10 )); then sinactive=0$sinactive fi if (( "$minactive" < 10 )); then minactive=0$minactive fi if (( "$hinactive" < 10 )); then hinactive=0$hinactive fi procent=$[$[100*$timeinactive]/$timeall] procent=$[100-$procent] ###TELEGRAM#### token= chat_id= text="Пользователь закончил работу!Общее время работы: $hall:$mall:$sall. Время простоя: $hinactive:$minactive:$sinactive. Эффективность работы: $procent%." url="https://api.telegram.org/bot$token/sendMessage?chat_id=$chat_id&text=$text" curl -X POST "$url" 2 > /dev/null echo "0" > /var/monitoring/timeinactive.txt
Создадим текстовые файлы для хранения информации:
sudo nano /var/monitoring/timeinactive.txt
sudo nano /var/monitoring/start.txt
Задаем права на исполнение скриптов:
sudo chmod + x /var/monitoring/input.sh
sudo chmod + x /var/monitoring/input_stop.sh
Задаем права на файлы и папки:
sudo find / var / monitoring / -type d -exec chmod 777 {};
sudo find / var / monitoring / -type f -exec chmod 777 {};
Запускаем на выполнение файлы, и проверяем их на работоспособность:
sudo /var/monitoring/input.sh
ждем 1 мин, после чего должно прийти сообщение в Телеграмм.
sudo /var/monitoring/input_stop.sh
Проверяем сообщение в телеграмме.
Для автоматического запуска скриптов, используем systemd.service.
Сервис в операционных системах семейства Unix — программа выполняется в фоновом режиме и не имеет окон или других способов связи с пользователем.
Создадим файл monitoring.service
sudo nano /etc/systemd/system/monitoring.service
вставляем текст:
[Unit] Description=Monitoring config After=systemd-user-sessions.service [Service] ExecStart=/bin/bash /var/monitoring/input.sh ExecStop=/bin/bash /var/monitoring/input_stop.sh Type=oneshot RemainAfterExit=yes [Install] WantedBy=multi-user.target reboot.target poweroff.target
Даем права на файл:
sudo chmod + x /etc/systemd/system/monitoring.service
sudo chmod 644 /etc/systemd/system/monitoring.service
Перезагружаем systemd для поиска новых или измененных юнитов:
sudo systemctl daemon-reload
Включаем юнит в автозапуск при загрузке системы:
sudo systemctl enable monitoring.service
Чтобы проверить без перезагрузки, можно запустить и остановить юнит:
sudo service monitoring start
sudo service monitoring stop
Перезапускаем систему:
sudo reboot
Возможно Вам будет интересна еще одна моя статья: Создание Wi-FI точки доступа Raspberry PI
Оставить комментарий