同步集群单板时间的shell脚本

0.readme.txt                                                           

完成功能:以当前服务器时间为标准时间,同步时间给ip.txt文件中列出的服务器
需要同步的IP:添加到ip.txt(注意:不能把linux本机IP放到里面)
执行前配置:ntp.conf中 server 122.138.73.8(修改为linux本机IP)
执行用户:root
执行路径:/root/bin(建议放在该路径下执行)
执行命令:./synctime.sh

ps:为了执行同步时间的正确性,延长远程执行时间为1分钟,主要用于判断时间是否真正同步成功
   另外借用了颜色区分显示执行结果,让执行者更快看到执行情况
 

1.copyall.sh                                                            

#!/usr/bin/expect
#set timeout 15
spawn scp -r path1/file USER@IPS:path2
expect {
"yes/no" { send "yes\r"; exp_continue }
"Password:" { send "PASSWD\r";exp_continue }
"#" {send "\r"}
}

2.ip.txt                                                                 

IP                 USER       PASSWD
122.138.168.45       root       hello123

3.ntp.conf                                                            

################################################################################
## /etc/ntp.conf
##
## Sample NTP configuration file.
## See package 'ntp-doc' for documentation, Mini-HOWTO and FAQ.
## Copyright (c) 1998 S.u.S.E. GmbH Fuerth, Germany.
##
## Author: Michael Andres,  <ma@suse.de>
##         Michael Skibbe,  <mskibbe@suse.de>
##
################################################################################

##
## Radio and modem clocks by convention have addresses in the
## form 127.127.t.u, where t is the clock type and u is a unit
## number in the range 0-3.
##
## Most of these clocks require support in the form of a
## serial port or special bus peripheral. The particular 
## device is normally specified by adding a soft link
## /dev/device-u to the particular hardware device involved,
## where u correspond to the unit number above.
##
## Generic DCF77 clock on serial port (Conrad DCF77)
## Address:     127.127.8.u
## Serial Port: /dev/refclock-u
## 
## (create soft link /dev/refclock-0 to the particular ttyS?)
##
# server 127.127.8.0 mode 5 prefer

##
## Undisciplined Local Clock. This is a fake driver intended for backup
## and when no outside source of synchronized time is available.
##
server 10.137.168.41 # local clock (LCL)
fudge  127.127.1.0 stratum 10 # LCL is unsynchronized

##
## Add external Servers using
## # rcntp addserver <yourserver>
##

##
## Miscellaneous stuff
##

driftfile /var/lib/ntp/drift/ntp.drift # path for drift file

logfile   /var/log/ntp  # alternate log file
# logconfig =syncstatus + sysevents
# logconfig =all

# statsdir /tmp/  # directory for statistics files
# filegen peerstats  file peerstats  type day enable
# filegen loopstats  file loopstats  type day enable
# filegen clockstats file clockstats type day enable

#
# Authentication stuff
#
keys /etc/ntp.keys  # path for keys file
trustedkey 1   # define trusted keys
requestkey 1   # key (7) for accessing server variables
# controlkey 15   # key (6) for accessing server variables

4.ntp_test.sh                                                        

#!/bin/ksh
for((i=1;;i++))
do
echo -e "\033[40;36mntp sync begin \033[0m"
ntpd -g -q >ntp.out
len=`du -s ntp.out|awk '{print $1}'`
if [ $len -gt 0 ];then
 cat ntp.out
 echo -e "\033[40;36mntp sync success! \033[0m"
 exit
else
if [ $i -ge 3 ];then
echo -e "\033[40;36mntp sync failed,pls check your linux environment \033[0m"
exit
else
echo -e "\033[40;36mntp sync failed,try again! \033[0m"
fi
fi
done

 5.ssh_test.sh                                                         

#!/usr/bin/expect -f
set timeout 60
spawn ssh -l USER  IPS
expect {
"yes/no" { send "yes\r"; exp_continue }
"Password:" { send "PASSWD\r";exp_continue }
"#" {send "\r"}
}
expect "#"
send "cd path2\r"
send "rcntp stop\r"
send "sh ntp_test.sh\r"
send "date\r"
expect eof

6.synctime.sh                                                      

#!/bin/ksh
status=`service ntp status|grep "network time"|awk -F: '{print $2}'|grep running|wc -l`
#echo $status
if [ $status != 1 ];
then
echo -e "\033[40;36mstart ntp service...\033[0m"
rcntp start
i=21
for((i=$i;i--;i>=1))
do
if [ $i -le 0 ];then
echo -e "\033[40;36mntp service normal running\033[0m"
break;
fi
echo -e "\033[40;36mntp service normal running at $i seconds later\033[0m"
sleep 10
i=`expr $i - 9`
done
fi
path1=`pwd`
path2='/etc'
cat ip.txt |grep -v IP|while read line
do
IP=`echo $line |awk '{print $1}'`
USER=`echo $line |awk '{print $2}'`
PASSWD=`echo $line |awk '{print $3}'`
cp copyall.sh copyall.sh.bak
cp ssh_test.sh ssh_test.sh.bak
eval sed -i 's/IPS/$IP/g' `grep -rl IPS ssh_test.sh copyall.sh`
eval sed -i 's/USER/$USER/g' `grep -rl USER  ssh_test.sh copyall.sh`
eval sed -i 's/PASSWD/$PASSWD/g' `grep -rl PASSWD ssh_test.sh  copyall.sh`
eval sed -i 's:path1:$path1:g' `grep -rl path1 ssh_test.sh  copyall.sh`
eval sed -i 's:path2:$path2:g' `grep -rl path2 ssh_test.sh  copyall.sh`
for file in ntp.conf ntp_test.sh
do
cp copyall.sh copyall.sh.bak2
eval sed -i 's/file/$file/g' `grep -rl file copyall.sh`
expect -b copyall.sh
mv copyall.sh.bak2 copyall.sh
done
expect -b ssh_test.sh
mv copyall.sh.bak copyall.sh
mv ssh_test.sh.bak  ssh_test.sh
done

posted @ 2013-05-13 11:06  朗道二级相变  阅读(402)  评论(0编辑  收藏  举报