Есть задача снимать данные с датчиков 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]

Последние комментарии
8 лет 26 недель назад
8 лет 45 недель назад
9 лет 2 недели назад
9 лет 3 недели назад
9 лет 44 недели назад
9 лет 44 недели назад
9 лет 45 недель назад
9 лет 45 недель назад
9 лет 45 недель назад
9 лет 47 недель назад