Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam
Sytuacja taka:
Stoi sobie RPi - bez sprzętowego zegara, podpięty za to do netu.
Na maszynce działa sobie z crona (co minutę) pewien Bardzo Ważny Program, który potrzebuje wiedzieć która mianowicie jest godzina (rożnica kilku minut między rzeczywistą godziną a tą na malince ma niewielkie znaczenie).
W związku z tym Bardzo Ważny Program powinien sprawdzić, czy maszynka pobrała sobie z sieci aktualny czas, bo jeśli nie - przekazuje sterowanie innemu ustrojstwu (np. po awarii zasilania, rpi wstał ale router nie).
Sprawdzenie najchętniej poprzez sprawdzenie, czy istnieje jakiś tam pliczek w /run/shm...
Dodatkowo konieczne jest, aby maszynka próbowała ten czas pobrać aż do skutku.
Jakiś pomysł? Bo ja jeden mam ale wydaje mi się brzydki, nie będę nic sugerować, a zastosuję w ostateczności jeśli do niedzieli niczego mądrzejszego nie znajdę...
PS. Tak, wiem, zakup zegara sprzętowego byłby najlepszym rozwiązaniem, ale akurat nie było takich jak chciałem, a lutowanie czegokolwiek we flakach RPi dla faceta który pierwszy raz od kilkunastu lat bierze do ręki lutownicę to chyba nie jest najlepszy pomysł...
Ostatnio edytowany przez ethanak (2014-11-21 11:07:10)
Offline
ntpdate-debian
do crona ?
Offline
Dzięki - zrobię pewnie coś w stylu:
if [ ! -f /run/shm/date_ok ] ; then ntpdate cośtam && touch /run/shm/date_ok fi exec BardzoWażnyProgram
Offline
Ja mam do crona wrzucony skrypt:
root:~# cat /etc/cron.hourly/synchronizacja_czasu #!/bin/bash # ntp.task.gda.pl SERVER="153.19.250.123" if [ ! -x /usr/bin/rdate ]; then echo -e "ERROR: there's no \"rdate\" package installed in this system" exit 1 fi RESULT=`ping -W 1 -c 1 $SERVER | grep 'bytes from '` if [ $? -gt 0 ]; then echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $SERVER is \033[0;31mdown\033[0m" exit 1 else # echo -e "`date +'%Y/%m/%d %H:%M:%S'` - host $SERVER is \033[0;32mok\033[0m -`echo $RESULT | cut -d ':' -f 2`" rm -f /etc/adjtime > /dev/null nice -n -20 ionice -n 0 -c 1 rdate -v $SERVER > /dev/null hwclock --systohc --utc > /dev/null fi exit 0
Co godzinę aktualizuje sobie czas i jak serwer czasu nie odpowiada z jakiegoś powodu to pluje błędami i cron zgłasza, także łatwo się połapać czy czas się synchronizuje. Podobny kawałek mam też wrzucony do autostartu systemu, tak by mi się czas przed zalogowaniem ustawiał na poprawny i póki co działa. xD
Offline
@up
Jak już robimy festiwal skryptologicznej aktualizacji czasu:
#!/bin/bash MYPID="$$" echo $MYPID >>/cgroup/net_cls/users/netout/tasks; grep netout /proc/self/cgroup 2>&1 >/dev/null || exit 1; echo -e "Godzinę nastawiam ;)\n"; rm -f /etc/adjtime rdate -s -p ntp.task.gda.pl; hwclock --systohc --utc; echo -e "Czas nastawiony ;)\n"; exit 0;
Też siedzi w Cronie (/etc/cron.hourly/).
Offline
fajnie ale u mnie polecenie hwclock z przyczyn oczywistych nie zadziała (jak któryś z was nie wie czemu polecam przeczytanie pierwszego posta w wątku, ew. w razie niezrozumienia pętlę w stylu
do { read (first_post) ; } until understood
sensowne porady mile widziane - pkzpm zostawcie sobie na długie wieczory przy kominku.
Offline
No to sobie wyrzuć tę linijkę i aktualizuj czas systemowy tylko -- tam masz przecie zrobione to przez rdate.
Jacekalex -- co do twojego skryptu to ja go tam kiedyś przerabiałem, bo u mnie cron ciągle słał mi maile z komunikatami, że czas nastawia. xD Ja sobie to przerobiłem trochę tak by sprawdzał czy rdate w ogóle w systemie jest zainstalowany, czy serwer czasu odpowiada, nadałem priorytet dla procesu i na wypadek problemów dopiero by cron słał maila, że nie udało się zsynchronizować czasu. Przy starcie systemu skrypt jest wywoływany tylko w trybie verbose, zgłasza czas pingu do serwera czasu + o ile poprawił czas przy synchronizacji.
Offline
U mnie Cron w ogóle wysyła maile do /dev/null, do dziwactw w logach zatrudniam zazwyczaj logchecka.
Offline
1264
Ostatnio edytowany przez uzytkownikubunt (2016-12-01 01:03:05)
Offline
Przerost formy nad treścią bo ntpd sam się synchronizuje, ale jak ktoś lubi lub nie potrzebuje całego ntpd
10 4 * * * ntpdate -s ip/serwer
[quote=uzytkownikubunt]Tak z ciekawości: jaki błąd może dawać RTC w przeciętnym laptopie? Dla Raspberry s;rawdziłem i można było kupić układ określany jako super dokładny i producent deklarował 2 ppm w całkiem sporym zakresie temperatur. Ciekawy jestem jak to wygląda w przeciętnym laptopie.[/quote]
Sprawdzić doświadczalnie przy użyciu poleceń ntpq.
Dla zgłębienia tematu polecam
http://www.ntp.org/ntpfaq/NTP-s-algo.htm
Offline
ntpdate is a deprecated computer program used to quickly synchronize and set computers' date and time by querying a Network Time Protocol (NTP) server. It is available for a wide variety of unix-like operating systems.[/quote]
Lepiej unikać takich staroci. xD
Offline
w tej chwili mam coś takiego:
- odpalony ntpd (przylazł razem z raspbianem, działa zacnie)
- zamiast ntpdate zastosowałem sntp (wywoływany po starcie systemu do skutku, aby program miał informację o tym czy czas jest aktualny).
mam nadzieję, że dopisanie do sudoers informacji, że użytkownik kaloryfer może wykonać sntp bez hasła wystarczy...
w każdym razie całość wydaje się działać, jutro test na dym :)
Offline
[quote=morfik]
ntpdate is a deprecated computer program used to quickly synchronize and set computers' date and time by querying a Network Time Protocol (NTP) server. It is available for a wide variety of unix-like operating systems.[/quote]
Lepiej unikać takich staroci. xD[/quote]
Bo obecnie głównie stosuje się ntpd niezależnie czy ma to być dodatkowo serwer czasu czy nie. Do tego ntpd ma wbudowany mechanizm pollingu więc nie wymaga jakiś wymyślnych skryptów. Stąd nie widzę sensu stosowania skryptów, podobnie jak ntpdate właśnie z tego powodu jest "deprecated".
Offline
a jak z ntpd wydobyć informację czy czas jest aktualny? bo na czymś takim najbardziej by mi zależało...
Offline
ntpq -p
Lista źródeł czasu, jitter, informacji o typie źródła, offsecie, opóźnieniu w transmisji, o zastosowaniu źródła w korygowaniu, itd.
Offline
hm... sprawdzę w domu, ale dzisiaj czytałem sobie mana do ntpq i jakoś nie bardzo kojarzę aby taką informację podawał. możesz coś bliżej?
Offline
ntpstat
Choć ciebie pewnie to bardziej interesuje.
Offline
sprawdzę - w każdym razie dzięki za informacje.
Offline
Jeszcze możesz sprawdzić protokół ptp
[www]http://linuxptp.sourceforge.net/[/www]
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00011 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00106 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.146.37.222' WHERE u.id=1 |
0.00269 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.146.37.222', 1732811644) |
0.00046 | SELECT * FROM punbb_online WHERE logged<1732811344 |
0.00074 | DELETE FROM punbb_online WHERE ident='66.249.73.225' |
0.00053 | SELECT topic_id FROM punbb_posts WHERE id=279140 |
0.00004 | SELECT id FROM punbb_posts WHERE topic_id=26709 ORDER BY posted |
0.00056 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26709 AND t.moved_to IS NULL |
0.00007 | SELECT search_for, replace_with FROM punbb_censoring |
0.00197 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26709 ORDER BY p.id LIMIT 0,25 |
0.00104 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26709 |
Total query time: 0.00931 s |