Нужен telnet для соединения с телефонной системой, но не полным клиентским режимом

Как этот Perl пишет сценарий, я просто сделал на скорую руку работу?

#!/usr/bin/perl

use strict;
use warnings;
use Time::HiRes qw/time sleep/;

sub launch {
    return if fork;
    exec @_;
    die "Couldn't exec";
}

$SIG{CHLD} = 'IGNORE';

my $interval = shift;
my $start = time();
while (1) {
    launch(@ARGV);
    $start += $interval;
    sleep $start - time();
}

Использование: perl timer.pl 1 date '+%Y-%m-%d %H:%M:%S'

Это выполняло 45 минут без единственного пропуска, и я подозреваю, что это продолжит делать так, если a) системная нагрузка не станет настолько высокой, что ветвление () берет больше, чем секунда, или b) второй прыжок вставляется.

Это не может гарантировать, однако, что выполнения команды в точных вторых интервалах, поскольку существуют немного служебные, но я сомневаюсь, что это намного хуже, чем основанное на прерывании решение.

Я выполнил его приблизительно в течение часа с date +%N (наносекунды, расширение GNU), и выполнил некоторую статистику по нему. Большая часть задержки, которую это имело, составляла 1 155 микросекунду. Среднее число (среднее арифметическое) 216 мкс, средние 219 мкс, стандартное отклонение 42 мкс. Это выполнило быстрее, чем 270 мкс 95% времени. Я не думаю, что можно победить его кроме программой C.

0
14.05.2013, 21:23
1 ответ

Хорошо, для получения журнала от поля, вероятно, просто необходимо сделать

netcat fritz.box 1012 >> log.txt

Ваше распределение могло бы назвать netcat программу nc.

Сценарий Windows, который Вы отправили выше, является неправильным, так как он уничтожает все экземпляры telnet – и лишний, начиная со всего, что он делает, добавляют log.txt к log.old.

Если Вы хотите последнюю часть журнала, просто работаете tail -100 log.txt.

1
28.01.2020, 02:53
  • 1
    за соединением НУЖНО следить, если ссылка произошла. Текущий клиент просто останавливается после 15-60min без любого предупреждения вообще. Прямо сейчас я не могу проверить, активно ли это соединение или повреждается... Для предотвращения этого, это разъединяется после 10 минут и перезапускает соединение. также посмотрит на netcat, возможно, он имеет некоторый сторожевой таймер формы... –  SimBox.NL 14.05.2013, 21:08

Теги

Похожие вопросы