Start
 

Ostatnio chciałem zaktualizować czas w swoim służbowym komputerze. Niestety protokół NTP nie zdał egzaminu. Jak się okazuje niepopularne porty wychodzące (w tym przypadku 123) w wielu firmach są blokowane. Jako fan okrężnych rozwiązań i zbędnej programistycznej pracy, postanowiłem jakoś rozwiązać problem synchronizacji czasu. W takich okolicznościach powstał skrypt do aktualizacji zegara systemowego przy użyciu portu 80. W jakiż to magiczny sposób? Najzwyczajniej w świecie pozyskując te dane ze strony internetowej. Oczywiście nie ma raczej mowy o dokładności na poziomie zegara atomowego. Jednak jak mawiają babcie lepszy rydz niż...

#!/bin/sh
# Website with time source:
SOURCE=www.timeanddate.com/worldclock/city.html

# City code:
CITY=262

# Start data collecting:
if DATA=$(curl --connect-timeout 1 -G -d n=$CITY $SOURCE 2>/dev/null)
then
	# Find current time from webpage data:
	CURRENT=$(echo $DATA | grep -m 1 -o -P "[0-9]{2,}:[0-9]{2,}:[0-9]{2,}(?=</strong><strong)")
	
	# Check for clock edition privilege:
	if /usr/bin/date +%H:%M:%S -s "$CURRENT" >/dev/null 2>&1
	then
		/sbin/hwclock --systohc
		echo "Clock successfully updated to: $CURRENT"
	else
		echo "Cannot set clock, maybe root privileges required..."
	fi
else
	echo "Cannot grep time data from: $SOURCE"
fi