frug: Как реализовать/использовать таймер в скрипте на perl | bash

3 сообщения / 0 new
Последнее сообщение
Гость
frug: Как реализовать/использовать таймер в скрипте на perl | bash

Есть задача снимать данные с датчиков UPS в определённые интервалы времени, самое доступное, что напрашивается использовать cron, однако у него слишком низкое разрешение, хотелось бы получить интервал в секунду или меньше. А ещё лучше реализовать этот механизм прямо в скрипте, не прибегая к помощи внешних программ. Интересует реализация в perl ну и если можно то на bash. У кого какие мысли по этому поводу ?

inna
Не в сети
Зарегистрирован: 21/09/2010

#!/bin/bash
while true
do
date +%S
sleep 1
done

frug (не проверено)

[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 {
&nbsp&nbsp&nbsp use Time::localtime;
&nbsp&nbsp&nbsp $hour = localtime->hour;
&nbsp&nbsp&nbsp $min = localtime->min;
&nbsp&nbsp&nbsp $sec = localtime->sec;
&nbsp&nbsp&nbsp print "$hour.$min.$sec - ALRM signal arrived\n";
&nbsp&nbsp&nbsp }[/b][/color]

# Подпрограмма для обработки завершающих сигналов
[color=green][b]sub quit {
&nbsp&nbsp&nbsp print "Exiting...\n";
&nbsp&nbsp&nbsp exit;
&nbsp&nbsp&nbsp }[/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]

RSS-материал