Есть задача снимать данные с датчиков UPS в определённые интервалы времени, самое доступное, что напрашивается использовать cron, однако у него слишком низкое разрешение, хотелось бы получить интервал в секунду или меньше. А ещё лучше реализовать этот механизм прямо в скрипте, не прибегая к помощи внешних программ. Интересует реализация в perl ну и если можно то на bash. У кого какие мысли по этому поводу ?
frug: Как реализовать/использовать таймер в скрипте на perl | bash
#!/bin/bash
while true
do
date +%S
sleep 1
done
[b]inna[/b], спасибо за пример. ;-)
Реализовал задачу на перле, только несколько иначе, хотя можно было бы "высыпаться" нужные промежутки времени, как в вашем примере.
Сделал таким образом:
[blockquote][color=green][b]#!/usr/bin/perl
use Time::HiRes; qw(setitimer ITIMER_REAL);[/b][/color]
# Задаём подпрограммы для обработки сигналов
[color=green][b]sub timer_event {
    use Time::localtime;
    $hour = localtime->hour;
    $min = localtime->min;
    $sec = localtime->sec;
    print "$hour.$min.$sec - ALRM signal arrived\n";
    }[/b][/color]
# Подпрограмма для обработки завершающих сигналов
[color=green][b]sub quit {
    print "Exiting...\n";
    exit;
    }[/b][/color]
# Вешаем обработчик на сигналы завершения процесса
[color=green][b]$SIG{INT} = \&quit;
$SIG{TERM} = \&quit;[/b][/color]
# Вешаем обработчик на сигнал интервального таймера ALRM
[color=green][b]$SIG{ALRM} = \&timer_event;[/b][/color]
# Запускаем интервальный таймер со следующими параметрами
# ITIMER_REAL - вести отсчёт относительно реального времени
# первый сигнал будет сгенерирован через одну секунду после запуска таймера
# последующие сигналы будут генерироваться с переодичностью в пол секунды
[color=green][b]Time::HiRes::setitimer(ITIMER_REAL, 1, 0.5);[/b][/color]
# Отправляем программу в бесконечный цикл ожидания сигналов таймера
[color=green][b]while (1){};[/b][/color][/blockquote]

Последние комментарии
10 лет 22 недели назад
10 лет 41 неделя назад
10 лет 51 неделя назад
10 лет 51 неделя назад
11 лет 41 неделя назад
11 лет 41 неделя назад
11 лет 41 неделя назад
11 лет 42 недели назад
11 лет 42 недели назад
11 лет 43 недели назад