Требуется вести базу данных включений - выключений системы а базе такой структуры :id pow_on_date pow_on_time pow_off_date pow_off_time
то есть в одной записи mysql фиксировать дату и время включения, и выключения. Подскажите как сделать, то ли скриптами при старте и выключении системы, то ли отдельной прогой с отлавливанием сигналов TERM , HUP .
Пробую в программе перехватывать сигналы TERM и HUP, в обычной меленькой проге тестовой работает перехват ... (пример брал из info signal) ... а вот в проге с SDL не пашет чего то ... подскажите, может есть какие то возможности отключить возможность перехвата, и в этих сторонних библиотеках SDL заблокирован перехват ...
>Требуется вести базу данных включений - выключений системы а базе такой структуры
>:
>
>id pow_on_date pow_on_time
> pow_off_date pow_off_time
>
>то есть в одной записи mysql фиксировать дату и время включения, и
>выключения. Подскажите как сделать, то ли скриптами при старте и выключении
>системы, то ли отдельной прогой с отлавливанием сигналов TERM , HUP
>.
>
>Пробую в программе перехватывать сигналы TERM и HUP, в обычной меленькой проге
>тестовой работает перехват ... (пример брал из info signal) ... а
>вот в проге с SDL не пашет чего то ...
> подскажите, может есть какие то возможности отключить возможность перехвата, и
>в этих сторонних библиотеках SDL заблокирован перехват ...ИМХО, очень глупая затея. База данных на момент получение Вашей программой SIGTERM/SIGKILL (причем тут SIGHUP?!) уже может завершить свое выполнение. В итоге пролетите как фанерка над Парижем.
Я бы посмотрел в сторону парсинга utmp. В FreeBSD в ней заносятся, например, время shutdown, reboot:
In the event of a date change, a shutdown or reboot, the following items
are logged in the wtmp file.reboot
shutdown A system reboot or shutdown has been initiated. The character
`~' is placed in the field ut_line, and reboot or shutdown in
the field ut_name (see shutdown(8) and reboot(8)).date The system time has been manually or automatically updated (see
date(1)). The command name date is recorded in the field
ut_name. In the field ut_line, the character `|' indicates the
time prior to the change, and the character `{' indicates the
new time.
Если желание копаться в utmp нет, то прямой путь - last(1)
>>Требуется вести базу данных включений - выключений системы а базе такой структуры
>>:
>>
>>id pow_on_date pow_on_time
>> pow_off_date pow_off_time
>>
>>то есть в одной записи mysql фиксировать дату и время включения, и
>>выключения. Подскажите как сделать, то ли скриптами при старте и выключении
>>системы, то ли отдельной прогой с отлавливанием сигналов TERM , HUP
>>.
>>
>>Пробую в программе перехватывать сигналы TERM и HUP, в обычной меленькой проге
>>тестовой работает перехват ... (пример брал из info signal) ... а
>>вот в проге с SDL не пашет чего то ...
>> подскажите, может есть какие то возможности отключить возможность перехвата, и
>>в этих сторонних библиотеках SDL заблокирован перехват ...
>
>ИМХО, очень глупая затея. База данных на момент получение Вашей программой SIGTERM/SIGKILL
>(причем тут SIGHUP?!) уже может завершить свое выполнение. В итоге пролетите
>как фанерка над Парижем.
>
>Я бы посмотрел в сторону парсинга utmp. В FreeBSD в ней заносятся,
>например, время shutdown, reboot:
> In the event of a date change,
>a shutdown or reboot, the following items
> are logged in the wtmp file.
>
> reboot
> shutdown A system reboot or shutdown
>has been initiated. The character
>
> `~' is placed in the field ut_line, and
>reboot or shutdown in
>
> the field ut_name (see shutdown(8) and reboot(8)).
>
> date The
>system time has been manually or automatically updated (see
>
> date(1)). The command name date is recorded
>in the field
>
> ut_name. In the field ut_line, the character
>`|' indicates the
>
> time prior to the change, and the character
>`{' indicates the
>
> new time.
>
>
>Если желание копаться в utmp нет, то прямой путь - last(1)
какие дебри ... всё решил гораздо проще ....инициализация перехвата SIGTERM/SIGKILL должна производиться до инициализации SDL , пока не знаю почему, тогда всё работает ... написал маленькуюпрограммку , которая выполняет запрос INSERT з записью в поле pow_on_date значения CURDATE() а в pow_on_time - CURTIME() и просто вставил эту саму программку в стартовые скрипты ... а на выключение нормально реагирует, и никаких ранних ДЕинициализаций mysql не наблюдается .
>какие дебри ... всё решил гораздо проще ....Это большой "хак" и никак иначе это не назовешь. Работает в данном конкретном случае. И если уж на то пошло, то нужно рыть как минимум в направлении /etc/rc.shutdown (*BSD).
>инициализация перехвата SIGTERM/SIGKILL должна производиться до инициализации SDL , пока не знаю
>почему, тогда всё работает ... написал маленькуюпрограммку , которая выполняет запрос
>INSERT з записью в поле pow_on_date значения CURDATE() а в pow_on_time
>- CURTIME() и просто вставил эту саму программку в стартовые скрипты
>... а на выключение нормально реагирует, и никаких ранних ДЕинициализаций mysql
>не наблюдается .
man 5 utmp
Весь формат файла расписан в подробностях и весьма прост.
Кстати SIGKILL не перехватывается, если ставите обработчик - это бесполезный код.