Shell功能
脚本获取域名的IP地址
自动检测公网IP地址并更新到公云PubYun
获取公网IP地址的多种方式
深入理解 Bash 中的管道与子 Shell:防止常见陷阱
CentOS和Ubuntu的Shell兼容点
主机之间ping命令检测
脚本匹配ip地址正则表达式
CentOS 7.x系统三级等保规范脚本
Shell数值计算的几种方法
脚本单实例运行的进程锁
主机通过客户端实时上传本地文件到对象存储
执行命令前关闭history记录
Bash中的变量声明与处理
sed:使用正则匹配IP地址
sed: 匹配并在中间位置插入字符
Find排除多个目录并按多个后缀查找文件
Linux主机巡检脚本
增加CPU使用率到指定范围
本文档使用 MrDoc 发布
-
+
home page
自动检测公网IP地址并更新到公云PubYun
## 操作说明 1、保存内容到文件`ddnsUpdate.sh` 2、修改如下配置为自己实际信息,其中: `Udomain`为主机名 `loginUser`为登录用户名 `loginPassword`为登录密码 3、保存后执行`nohup bash ./ddnsUpdate.sh &`命令即可 ------------ 注意: 1、需要先安装curl程序,在centos下安装的命令为:`yum install curl -y` 2、该脚本已实现自运行监测,只需要添加该脚本到定时任务并让其每分钟执行一次即可。(原理为每分钟检查一次脚本是否在运行,已运行则退出,未运行则启动新的脚本循环任务每秒检查一次) ## 脚本源码 ```shell #!/bin/bash ddnsDomain=' ' loginUser=' ' loginPassword=' ' #IP检测地址 checkIp='http://ip1.dynupdate.no-ip.com' DIR="$( cd "$( dirname "$0" )" && pwd )" #检查是否已执行该程序 processNum=$(ps -aux|grep ddnsUpdatePlus.sh|grep -v grep|wc -l) if [[ "$processNum" < '3' ]]; then nohup bash $DIR/ddnsUpdatePlus.sh & rm -f $DIR/nohup.out else exit 0 fi function dateInfo() { echo "[$(date +%F\ %H:%M:%S)] " } while true; do #date="[$(date +%F\ %H:%M:%S)] " retCode='000' while [[ $retCode == '000' ]]; do retCode=`curl -I -s --connect-timeout 5 www.baidu.com -w %{http_code} | tail -n1` sleep 1 if [[ $retCode == '000' ]]; then echo "`dateInfo` Network connectivity check failed, retrying..." >> $DIR/ipUpdate.log fi done #如果文件不存在,就自动创建信息 if [[ ! -f /root/.currPublicIP ]]; then echo "$(curl -s $checkIp)" > /root/.currPublicIP; fi #获取新公网ip new_ip=`curl -s $checkIp` while [[ $new_ip == '' ]]; do echo "`dateInfo` Failed to obtain the new ip address and try again after 1 sec..." >> $DIR/ipUpdate.log sleep 1 new_ip=`curl -s $checkIp` if [[ $new_ip != '' ]]; then echo "`dateInfo` Success to obtain the new ip address" >> $DIR/ipUpdate.log;fi done #查看旧ip old_ip=`cat /root/.currPublicIP` domainIP=$old_ip #当旧ip不同于新ip则更新信息 while [[ $domainIP != $new_ip ]]; do #更新信息到公云 echo "`dateInfo` Update forced for alias $ddnsDomain, new IP -> $new_ip" >> $DIR/ipUpdate.log Msg=$(/usr/bin/curl -s -u $loginUser:$loginPassword "http://members.3322.net/dyndns/update?system=dyndns&hostname=$ddnsDomain") echo "`dateInfo` Return result: $Msg" >> $DIR/ipUpdate.log #休息3秒后查域名解析状态 sleep 3 domainIP=$(ping $ddnsDomain -c 1 | sed '1{s/[^(]*(//;s/).*//;q}') if [[ $domainIP == $new_ip ]]; then echo "`dateInfo` Successful alias table update for $ddnsDomain." >> $DIR/ipUpdate.log fi done echo $domainIP > /root/.currPublicIP #休息1秒再检查 sleep 1 done ```
Nathan
July 8, 2021, 2:36 p.m.
转发文档
Collection documents
Last
Next
手机扫码
Copy link
手机扫一扫转发分享
Copy link
Markdown文件
PDF文件
Docx文件
share
link
type
password
Update password