Питання
Я хотів би мати можливість виконувати команду UNIX точно кожну секунду протягом тривалого періоду .
Мені потрібно рішення, яке не відстає від певного часу через час, який команда сама потребує для виконання. сон , дивитись , і певний сценарій пітона все це мене провалило.
На мікроконтролері, такому як 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
Відмінністю будуть непередавані часові позначки. З цього я б знав, в який час моя локальна мережа / WAN / ISP створює проблеми.
Розв’язання SLEEP
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 кожні x секунд назавжди
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
процес, який спить?