Вопрос
Я хотел бы иметь возможность выполнять команду UNIX точно каждую секунду в течение длительного периода времени .
Мне нужно решение, которое не отстает от определенного времени из-за времени, необходимого самой команде для выполнения. сон , часы и некий скрипт на python все меня подвели в этом отношении.
На микроконтроллере, таком как http://Arduino.cc, я бы делал это с помощью аппаратных прерываний часов. Я хотел бы знать, есть ли подобное решение для сценариев оболочки с точным временем. Все решения, которые я нашел на StackExchange.com, привели к заметной задержке во времени, если работать в течение нескольких часов. Подробности смотрите ниже.
Практическое назначение / применение
Я хочу проверить, постоянно ли работает мое сетевое соединение, посылая временные метки через nc
(netcat) каждую 1 секунду.
Отправитель:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
Приемник:
nc -l -p $port > netcat-receiver.txt
После завершения сравните два журнала:
diff netcat-sender.txt netcat-receiver.txt
Различия будут непередаваемыми временными метками. Из этого я бы узнал, в какое время мой LAN / WAN / ISP создает проблемы.
Решение СОН
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
Получает определенное смещение с течением времени, так как команда в цикле также занимает немного времени.
точность
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
Прошло секунд: 34520
wc -l timelog-sleep.txt
Строки в файле: 34243
Точность суммируется:
- 34520-34243 = 277 проблем с синхронизацией
- 34520/34243 = 1,008 = 0,8%
Решение ПОВТОРНЫЙ ПИТОН
Найдено в: Повторите команду Unix каждые х секунд навсегда
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
Предполагается избежать временного смещения, но не может этого сделать.
точность
wc -l timelog-repeat-py.txt
2012-07-16 13:42:44
[...]
2012-07-16 16:45:24
Прошло секунд: 10960
wc -l timelog-repeat-py.txt
Строки в файле: 10859
Точность суммируется:
- 10960-10859 = 101 проблема синхронизации
- 10960/10859 = 1,009 = 0,9%
Решение СМОТРЕТЬ
watch -n 1 "date '+%Y-%m-%d %H:%M:%S' >> ~/Desktop/timelog-watch.txt"
точность
wc -l timelog-watch.txt
2012-07-16 11:04:08
[...]
2012-07-16 13:25:47
Прошло секунд: 8499
wc -l timelog-watch.txt
Строки в файле: 8366
Точность суммируется:
- 8499-8366 = 133 проблемы со временем.
- 8499/8366 = 1,016 = 1,6%.
nice
процесс, который спит?