Задание для bash

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
DnDwarf
рядовой
Сообщения: 29
Зарегистрирован: 2008-10-19 13:30:59

Задание для bash

Непрочитанное сообщение DnDwarf » 2009-09-04 16:16:03

Уважаемые, помогите пожалуйста осмыслить принцип задания и его выполнения.
Задание от заказчика пришло в письменном виде и выглядит примерно так, уточнить детали нет возможности, понимай как хочешь как говорится.
Вот оно:

Задача
Написать сервис и init скрипт, делающий скриншоты экранов пользователей через произвольные индивидуальные промежутки времени.
Частота создания снимков задается в конфигурационном файле отдельно для каждого пользователя. Также в конфигурационном файле должна задаваться периодичность по-умолчанию. Выбор утилиты для снятия скриншотов не принципиален, выбирайте любую известную.
Пример конфигурационного файла
Пример конфигурационного файла /etc/sysconfig/scrdump
STORAGE="/var/screendumps" #каталог, куда складывать скриншоты

USERS=( user1 user2 user3 ) #имена пользователей

DUMP_INTEVAL=10 #по-умолчанию каждые 10 секунд делать скриншот
user1_INTERVAL=15 #для пользователя user1 делать скриншот каждые 15 секунд

Дополнтельные условия
Плюсом при решении данной задачи будет являться выполнения следующих условий (чем больше, тем лучше):

* проверка корректности выполнения операций и возврат ошибок на всех стадиях
* доп. аргумент 'status' выдающий информацию о состоянии скрипта и его настройках
* Любые улучшения и предложения к решению поставленной задачи.
___________________________________________

Сам я в bash новичок но вот что сделано, написан примерный скелет скрипта:

Код: Выделить всё

#!/bin/bash

case $1 in 
start)
daemon --name=test /home/dndwarf/test.sh work
;;
work)
scrot $m /home/dndwarf/1.jpg
#### тут должен быть цикл и промежуток между скриншотами задается коммандой sleep, ну а имя файла генерарурется как-нить, например по date.
;;
stop)
daemon --stop --name=test
;;
status)
daemon --running --verbose --name=test
;;
*)
echo mda
;;
esac

И вот тут встал вопрос, а что вообще хочет работодатель? Либо то, что пользователь приходит, запускает этот сервис и постоянно делаются скрины, тут вопросов то нет получается, все почти сделано.
Вариант 2, скрипт стартует с системой, отлавливает кто сейчас подключен и делает скрины их терминалов. Программку, которая делает скрины по номеру дисплея я нашел, X сессии находятся путем `pidof X`, а вот дальше вопрос, как правильно найти пользователя кто работает в этом конкретном дисплее. Например X всегда запускаются от рута. Если это нулевой дисплей который стартует с системой то он запускается путем запуска gdm, единственный способ отследить который я нашел это отслеживать кто работает сейчас в tty7 (по умолчанию нулевой дисплей там грузится). А вот что делать если пользователь перешел на другой терминал, к примеру tty2, там залогинился и оттуда уже запустил gnome-session.

В общем любой помощи буду благодарен, заранее спасибо.
Последний раз редактировалось DnDwarf 2009-09-09 16:43:21, всего редактировалось 1 раз.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35411
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Задание для bash

Непрочитанное сообщение Alex Keda » 2009-09-06 23:19:17

ну, а в чём проблема?
сделать вечный цикл?

Код: Выделить всё

while true; do .... done
Убей их всех! Бог потом рассортирует...

DnDwarf
рядовой
Сообщения: 29
Зарегистрирован: 2008-10-19 13:30:59

Re: Задание для bash

Непрочитанное сообщение DnDwarf » 2009-09-08 12:40:52

Проблема в том чтобы отловить кто сейчас работает, например по who видны залогиненные пользователи, по умолчанию в гноме первая гном сессия запускается через gdm от рута.. первая Х сессия запускается на tty7 на дисплее :0, то есть этот дисплей то вообще легко в цикле скринить.. Но нужна же выборка еще по пользователю, ладно я по who могу эту выборку сделать, смотреть кто сейчас на tty7 работает. А теперь как это легко обойти, переходит на tty2, и запускает к примеру xinit `which xterm` и из новых Xсов запускаем гном сессию, теперь что имеем. pidof X показывает еще одну X сессию, запущена она к примеру на tty8, в who уже ничего не показывается, так как логин был на tty2, дальше если смотреть через ps, то еще одна X сессия запущена от root (X session почему то всегда числится от рута, а не от пользователя кто фактически запустил) и только сделав ps по parent pid, можно по процессу родителю выявить реального пользователя кто X сесиию запустил. И вот я и думаю, стандартный дисплей скринить можно по who и номеру дисплея :0, а остальные приходится 2 выборки по ps делать чтобы узнать пользователя, коряво получается, вот ищу более красивый способ, возможному работодателю же не понесешь скрипт, где ты выборку делал через гималаи если есть более красивый простой вариант... :(

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: Задание для bash

Непрочитанное сообщение schizoid » 2009-09-16 12:29:53

что-то мне кажется, что речь идет не об одном и том же компе.
мне думается так: есть парк машин, с Unix-подобной осью, необходимо следить за машинами, кто-чего делает.
ядерный взрыв...смертельно красиво...жаль, что не вечно...