前言
由于自己的linux系统安装在U盘上面,所以每次启动linux时间都是错的,对于强迫症患者来说,肯定是不能忍受的,每一次都要百度当前时间,然后用date -s命令设置时间,这种做法无疑是很不程序员的做法,所以就想着写一个脚本用来自动同步设置时间,其中遇到了很多坑,所以这里记录下来顺便分享给大家。
时间同步脚本
首先贴出时间同步的time.sh脚本,很简单的一个shell脚本。首先通过对时接口获取到时间保存在本地,然后使用date -s "@timestamp",使用时间戳去设置时间即可。接下来就是配置开机运行这个脚本即可。
#时间服务器地址 time_server="http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json" #临时文件位置 time_temp_file="/temp.time" #下载时间到本地 wget -q -O ${time_temp_file} ${time_server} #读取下载的时间 timestamp=$(cat ${time_temp_file} | cut -d \" -f 10 ) date -s "@${timestamp}" #删除临时文件 rm ${time_temp_file}
用户登录时执行同步脚本
在上一篇博客Linux下环境变量的那些事中我介绍了下几个设置环境变量的位置,分别如下:
位置 | 针对用户 | 执行时机 |
/etc/profile | 任何用户 | 任何用户登录的时候 |
~/.bash_profile 或 ~/.profile | 单个用户 | 当用户登录时该文件仅执行一次 |
~/.bashrc | 单个用户 | 当用户登录以及每次打开新的 shell 时 |
通过分析我们可以知道,将这个脚本的执行放在~/.profile中即可,这样当我从u盘启动登录的时候就会同步一次时间。注意:如果脚本很耗时,那么会导致用户登录以后进入系统很慢!!!
将脚本加入开机启动项
首先对于开机启动脚本的位置都放置在/etc/init.d/下面,我们可以参考该目录下的README文件进行书写,README下载 其实大致也就是如下几点
1、文件头第一句必须为#!/bin/sh
2、需要使用LSBInitScripts描述脚本,参考地址:https://wiki.debian.org/LSBInitScripts
3、使用update-rc.d命令来将脚本加入到/etc/rc?.d(?一般为0-6的数字)
其中etc/rc?.d分别代表系统不同的运行等级,关于系统运行等级输入runlevel命令即可
>>runlevel N 2
然后在相应的目录(/etc/rc2.d/)下面创建一个软链接(ln -s)指向/etc/init.d/下的对应脚本即可,update-rc.d命令也只是创建软连接而已,具体的请查看博客:追梦的飞飞