Mam dwa komputery, ale nie mogę zmienić czasu w jednym, więc muszę zsynchronizować jeden z drugim. Ma QNX. Co mogę zrobić?? tylko polecenia
root
dostęp do obu maszyn, więc nie jest to opcja. Zrozumiałem to przez „nie mogę zmienić czasu w jednym”.
Mam dwa komputery, ale nie mogę zmienić czasu w jednym, więc muszę zsynchronizować jeden z drugim. Ma QNX. Co mogę zrobić?? tylko polecenia
root
dostęp do obu maszyn, więc nie jest to opcja. Zrozumiałem to przez „nie mogę zmienić czasu w jednym”.
Odpowiedzi:
Najlepszym rozwiązaniem byłoby zainstalowanie NTP na obu komputerach i zsynchronizuj je z tym samym serwerem. Oczywiście nie jest to opcja, jeśli tylko masz root
dostęp do jednego z dwóch.
Zakładając, że masz dostęp ssh do obu maszyn, to machine1
to ten, z którym się umawiasz nie może zmienić i machine2
ten, z którym się umawiasz mogą zmiana (jako root
użytkownik), możesz zrobić coś takiego:
remote_time=`ssh user@machine1 date` && date -s $remote_time
Musisz się zmienić user
na nazwę użytkownika machine1
. Jeśli uruchomisz to polecenie po zalogowaniu jako root
na machine2
, ustawisz jej datę na taką samą wartość jak machine1
.
WYJAŚNIENIE:
Powyższe polecenie spowoduje ssh
jako użytkownik user
do machine1
i zapisz wynik date
(aktualny czas i data dla machine1
) do zmiennej $remote_time
. Jeśli ssh
kończy się pomyślnie ( &&
), druga część polecenia ustawi czas machine2
(maszyna, z której polecenie zostało uruchomione) do wartości $remote_time
.
CAVEAT: Dwa polecenia wymagają trochę czasu. Kiedy przetestowałem je na moim komputerze, zajęło im to 0,3 sekundy, może to zająć więcej czasu. Pamiętaj tylko, że jeśli potrzebujesz dokładności rzędu milisekund, to nie zadziała. Z drugiej strony, jeśli potrzebujesz dokładności milisekundy, tylko to, co będzie działać, to synchronizacja obu komputerów z serwerem NTP.
Jeśli potrzebujesz większej dokładności i nie chcesz używać ntp z jakiegokolwiek powodu, możesz użyć tej modyfikacji w metodzie @terdon.
Metoda leniwa. Załóżmy, że wydajesz 0.85s w połączeniu ssh:
host1# b=`date +%s.%N`; a=`echo $b + 0.85|bc`; ssh -4 -C user@host2 "date --set=\"@$a\""
Bardziej wyrafinowane:
host1# a=`ssh user@host2 date +%s.%N` ; b=`ssh user@host2 date +%s.%N`; c=`echo $b +$b -$a | bc ` ; echo $c ;ssh user@host2 "date --set=\"@$c\" --rfc-3339=ns" ;date --rfc-3339=ns
1514483228.883729365
2017-12-28 18:47:08.883729365+01:00
2017-12-28 18:47:08.790489767+01:00
Warunkiem wstępnym jest przygotowanie klienta i serwera do wymiany kluczy użytkownika w celu uniknięcia wprowadzania haseł i upewnienia się, że masz rozdzielczość odwrotną dns zarówno komputera host1, jak i będziesz mieć opóźnione połączenie ssh.