luther@gliethttp:~$ vim dns_ds.sh
#!/usr/bin/awk -f
# dns_ds.sh
# 说明:当网线被不经意拔掉之后本来手工设置在/etc/resolv.conf中的静态dns将被清空,
# 故加入该daemon脚本,当检测到dns丢失之后,网线重新恢复正常之后,自动添加静态dns,
# 无需再手工添加,实现本地静态dns添加的自动化[luther.gliethttp].
# 对于网线是否被拔掉的检测,可以使用检测/sys/class/net/eth0/carrier或者operstate文件中
# 数值来判断
# 输入文件读取第1行数据,如果直接
# 执行./dns_ds.sh那么将从stdin读取一行数据,如果加入参数
# 执行./dns_ds.sh /etc/passwd
#////////////反复执行的语句体//////////////
{
# print $0 # 打印读入的一行
print # 打印读入的一行,和上面的效果一样
exit; # 显示的退出,否则,awk将一直反复执行{}内的语句
}
#////////////程序加载时,首先执行的语句体,执行完该语句体之后,将重复执行上面{}内部语句//////////////
BEGIN {
dns_ip = "192.168.1.101"
dns_file = "/etc/resolv.conf"
print dns_file
do {
# if (system(sprintf("[ -f %s ]", dns_file)) == 0) {
if (system("[ -f "dns_file" ]") == 0) {
dns_ip_ok = 0
while (getline < dns_file) {
if ($1 == "nameserver") {
if ($2 != dns_ip) {
system("sed \"1i\\nameserver "dns_ip"\" "dns_file">/tmp/dns_file.tmp.luther.gliethttp.00")
system("mv /tmp/dns_file.tmp.luther.gliethttp.00 "dns_file)
print dns_ip" appended!"
}
dns_ip_ok = 1
break
}
}
if (dns_ip_ok == 0) {
system("echo \"nameserver "dns_ip"\" >> "dns_file)
print "null line!"
}
close(dns_file)
} else {
print dns_file" dosen't exit!"
}
system("sleep 4")
} while (1)
}
#////////////程序退出时调用//////////////
END {
# print "exit!\n"
}
luther@gliethttp:~$ sudo ./dns_ds.sh
或者加到rc.local启动脚本中
阅读(2994) | 评论(0) | 转发(0) |