前言

因为最近docker中的打包容器时间不太准确,容器我也没办法控制,只能另求它法

摸索

由于系统的时间不准确,导致生成的时间文件不对,所以解决想法就是通过获取网络时间并使用。

通过网络查询,找到类似的脚本,但是并不能直接使用。遂临时学了下linux命令,最终摸索出如下代码。

原理:获取时间网站页面数据并保存到本地,用cat命令去读取文件,通过grep匹配,awk截取

wget -q http://time.tianqi.com/beijing

time_ch=$(cat ./beijing |grep "clock" |awk -F ">" '{print $2}' |awk -F "<" '{print $1}')
year=$(echo $time_ch |awk -F "年" '{print $1}' )
month=$(echo $time_ch |awk -F "年" '{print $2}' |awk -F "月" '{print $1}' )
day=$(echo $time_ch |awk -F "月" '{print $2}'|awk -F "日" '{print $1}')
time_now=$(echo $time_ch |awk '{print $3}')
time_a=$(echo "$year-$month-$day $time_now")

# sudo date -s "$time_a"

rm ./beijing

上机一试,没有wget。。。

不想下载wget,寻求其他方式

尝试使用curl命令

curl http://time.tianqi.com/beijing

!!!403!!!

添加User-Agent(创建请求的浏览器和用户代理名称等信息传达给服务器)信息就可以访问了。

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" http://time.tianqi.com/beijing

访问成功

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" -o beijing http://time.tianqi.com/beijing

保存文件成功

实践

# 下载网页
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" -o beijing http://time.tianqi.com/beijing

time_ch=$(cat ./beijing |grep "clock" |awk -F ">" '{print $2}' |awk -F "<" '{print $1}')
year=$(echo $time_ch |awk -F "年" '{print $1}' )
month=$(echo $time_ch |awk -F "年" '{print $2}' |awk -F "月" '{print $1}' )
day=$(echo $time_ch |awk -F "月" '{print $2}'|awk -F "日" '{print $1}')
time_now=$(echo $time_ch |awk '{print $3}')
time_a=$(echo "$year-$month-$day $time_now")

# sudo date -s "$time_a"

# 删除文件,以便下次获取
rm ./beijing

由于网站改版,导致原本的命令获取不到数据,现更改为如下

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36" -o beijing http://time.tianqi.com/beijing

# 2021年09月29日,星期三
date=$(cat ./beijing |grep "span>202" |awk -F ">" '{print $2}' |awk -F "<" '{print $1}')

# 2021年09月29日
#date=$(cat ./beijing |grep "span>202" |awk -F ">" '{print $2}' |awk -F "<" '{print $1} |awk -F "," '{print $1}'')

hour=$(cat ./beijing |grep "hour_box" |awk -F ">" '{print $2}' |awk -F "<" '{print $1}')
min=$(cat ./beijing |grep "hour_box" |awk -F ">" '{print $6}' |awk -F "<" '{print $1}')
sec=$(cat ./beijing |grep "hour_box" |awk -F ">" '{print $10}' |awk -F "<" '{print $1}')

# 2021年09月29日,星期三 11:51:20
time=$(echo "$date $hour:$min:$sec")

# 删除文件,以便下次获取
rm ./beijing

windows保存

执行是发生shell脚本执行错误 $’\r’:command not found
存现这种错误是因为 编写的 shell脚本是在win下编写的,每行结尾是\r\n 的Unix 结果行是\n
所以在Linux下运行脚本 会任务\r 是一个字符,所以运行错误,需要把文件转换下
方法一、

sed -i 's/\r//' 脚本名

方法二、

yum -y install dos2unix

dos2unix 脚本名

参考

shell练习–获取网络时间,调整Linux系统时间

linux命令大全

curl命令

curl打开网页403或者302的解决方法

发生shell脚本执行错误 $’\r’:command not found