90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
|
|
import os
|
||
|
|
import sys
|
||
|
|
import time
|
||
|
|
import traceback
|
||
|
|
|
||
|
|
try:
|
||
|
|
import requests
|
||
|
|
except:
|
||
|
|
os.system("btpip install requests")
|
||
|
|
import requests
|
||
|
|
try:
|
||
|
|
import ntplib
|
||
|
|
except:
|
||
|
|
os.system("btpip install ntplib")
|
||
|
|
import ntplib
|
||
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
try:
|
||
|
|
import pytz
|
||
|
|
except:
|
||
|
|
os.system("btpip install pytz")
|
||
|
|
import pytz
|
||
|
|
|
||
|
|
|
||
|
|
def sync_server_time(server, zone):
|
||
|
|
try:
|
||
|
|
print("Getting time from {}...".format(server))
|
||
|
|
client = ntplib.NTPClient()
|
||
|
|
response = client.request(server, version=3)
|
||
|
|
timestamp = response.tx_time
|
||
|
|
tz = pytz.timezone(zone)
|
||
|
|
time_zone = datetime.fromtimestamp(timestamp, tz)
|
||
|
|
local_time = datetime.now()
|
||
|
|
offset = timestamp - time.time()
|
||
|
|
print("Local time:", local_time)
|
||
|
|
print("Server time:", time_zone)
|
||
|
|
print("Time offset:", offset, "seconds")
|
||
|
|
import os
|
||
|
|
print("Syncing time...")
|
||
|
|
os.system('date -s "{}"'.format(time_zone))
|
||
|
|
return True
|
||
|
|
except Exception as e:
|
||
|
|
print("Failed to retrieve time from {}!".format(server))
|
||
|
|
# print(traceback.format_exc())
|
||
|
|
return False
|
||
|
|
|
||
|
|
|
||
|
|
server_list = ['cn.pool.ntp.org', '0.pool.ntp.org', '2.pool.ntp.org']
|
||
|
|
|
||
|
|
if __name__ == '__main__':
|
||
|
|
area = sys.argv[1].split('/')[0]
|
||
|
|
zone = sys.argv[1].split('/')[1]
|
||
|
|
print("Current time zone setting:{}".format(sys.argv[1]))
|
||
|
|
if not zone:
|
||
|
|
exit()
|
||
|
|
os.system('rm -f /etc/localtime')
|
||
|
|
os.system("ln -s '/usr/share/zoneinfo/" + area + "/" + zone + "' '/etc/localtime'")
|
||
|
|
flag = 0
|
||
|
|
for server in server_list:
|
||
|
|
if sync_server_time(server, sys.argv[1]):
|
||
|
|
flag = 1
|
||
|
|
print("|-Synchronized time successfully!")
|
||
|
|
break
|
||
|
|
if flag == 0:
|
||
|
|
try:
|
||
|
|
port = '7800'
|
||
|
|
port_pl = '/www/server/panel/data/port.pl'
|
||
|
|
if os.path.exists(port_pl):
|
||
|
|
with open(port_pl) as _pf:
|
||
|
|
port = (_pf.read() or '').strip() or '7800'
|
||
|
|
local_url = 'http://127.0.0.1:{}/api/index/get_time'.format(port)
|
||
|
|
print("Getting time from {}...".format(local_url))
|
||
|
|
r = requests.get(local_url, timeout=8)
|
||
|
|
timestamp = int(r.text)
|
||
|
|
tz = pytz.timezone(sys.argv[1])
|
||
|
|
time_zone = datetime.fromtimestamp(timestamp, tz)
|
||
|
|
local_time = datetime.now()
|
||
|
|
offset = timestamp - time.time()
|
||
|
|
print("Local time:", local_time)
|
||
|
|
print("Server time:", time_zone)
|
||
|
|
print("Time offset:", offset, "秒")
|
||
|
|
print("Syncing time...")
|
||
|
|
os.system(f"date -s '{time_zone}'")
|
||
|
|
flag = 1
|
||
|
|
print("|-Synchronized time successfully!")
|
||
|
|
except:
|
||
|
|
print(traceback.format_exc())
|
||
|
|
if flag == 0:
|
||
|
|
print("|-Synchronization time error!")
|