使用crontab定时自动更新DDNS

需求说明:

N1盒子的armbian系统配置好了 ipv6 的ddns,实现了域名访问本机,但是本地ipv6可能会发生变化,当发生变化后,需要手动执行指令,将新的ip与域名绑定,现在我们采用定时任务,每1分钟执行一次命令,这样,当本地的ip6地址发生变化后,1分钟内就能自动绑定。

下载DDNS-master,放到 /usr/local/src 目录下并解压 ,这个目录专门用来放本地手动安装的应用。

具体步骤及配置文件见单独文章:

具体的设置:(76条消息) 使用 NewFuture DDNS 获取IPV6并动态更新_郭振振的博客-CSDN博客

我的定时设置:(76条消息) 我的 Crontab 日常使用_郭振振的博客-CSDN博客

实现步骤

DDNS手动执行更新的命令是在DDNS-master目录下执行:python3  ./run.py  或 python3  run.py

现在,我们将需要将这个执行命令,放到 crontab 里面,让程序自动执行,并且每次执行写到日志里面,方便查看。

具体如下:

新建一个文件:touch  ddns.sh

赋可执行权限:chmod  +x  ddns.sh  (或者chmod  777  ddns.sh)

编辑器打开编辑文件:nano ddns.sh  或者 vim ddns.sh

将需要执行等具体指令输入到这个文件中,如下:

#!/usr/bin/env bash
python3 ./run.py && echo "run.py文执行了"

然后 crontab -e 进入crontab编辑器,如下:

使用crontab定时自动更新DDNS_第1张图片

输入如下:

使用crontab定时自动更新DDNS_第2张图片

 过几分钟中,到 /tmp 目录下查看 ddns.log2有没有更新,如果有表示成功了,然后将猫路由器盒子都断电重启,重启后到阿里云后台查看域名解析的历史记录。

在文件里面加上日期,方便看日志

单引号和双引号的问题:

date +'%Y - %m -%d  %H:%M:%S'  和   date +"%Y-%m-%d  %H:%M:%S"  效果一样,效果如下:

ddns.sh文件最终如下:

#!/usr/bin/env bash
python3 ./run.py && echo "run.py被执行!执行时间:$(date +'%Y-%m-%d  %H:%M:%S')"

最终效果:

定时自动删除日志

因为日志文件每分钟都会追加一条进去,所以文件会越来越大

所以我们需要定期删除这个文件

crontab -e 添加下面内容:

# 每日23点30分删除 ddns.log 这个文件
30 23 * * * rm /tmp/ddns.log

没执行成功1

直接写在crontab里面,不用单独创建一个文件,写法如下(没有成功):

* * * * * cd /usr/local/src/DDNS-master && bash run.sh && echo "定时任务执行了" >> /tmp/ddns.log4

没执行成功2

# 测试1
* * * * * /usr/bin/bash /usr/local/src/DDNS-master/auto-run.sh >> /tmp/ddns.log1

# 测试2
* * * * * bash /usr/local/src/DDNS-master/auto-run.sh >> /tmp/ddns.log2

使用crontab定时自动更新DDNS_第3张图片

没执行成功3

#!/usr/bin/env bash
python3 ./run.py && echo "run.py文执行了"
date +"执行时间:%Y-%m-%d  %H:%M:%S" 

没执行成功4

具体情况:日期未输出

原因:date 后面的日期变量缺少引号包起来

#!/usr/bin/env bash
python3 ./run.py && echo "run.py被执行!执行时间:$(date +%Y-%m-%d  %H:%M:%S)"

拓展

echo用法

参考:Linux常用命令13 - echo - 知乎 (zhihu.com)

重定向到一个文件

您可以使用操作符将输出重定向 > 或者 >> 到一个文件,而不是显示在屏幕上。

如果 file.txt 不存在,命令将创建它。 当使用该文件时将被覆盖,而将把输出附加到该文件。

可以使用 cat 命令查看该文件内容:

echo -e 'The only true wisdom is in knowing you know nothing.\nSocrates' >> /tmp/file.txt

使用 $(command)表达式将命令输出包含在 echo 的参数中, 下面的命令将显示当前日期:

echo "The date is: $(date +%D)"
The date is: 04/01/20

echo 还可以显示变量。在下面的示例中,我们将输出当前登录用户的名称:

echo $USER
admin

crontab用法

【crontab的常用命令:crontab -e 编辑,  crontab -l 查看】

【crontab 定时任务的常用规则: f1 f2 f3 f4 f5 program  】
    f1 表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天,program 表示要执行的程序。

语法学习:

        语法详解1:Linux Crontab 定时任务 | 菜鸟教程 (runoob.com)

        语法详解2:linux 定时任务crontab用法详解 (51gjie.com)

参考案例: 

*/5 * * * * /bin/echo "11" >> /tmp/test:每5分钟将“11”写入test文件

*/30 * * * * /usr/sbin/ntpdate 210.72.145.44     //每30分钟同步一下时间

* */1 * * * /usr/local/etc/rc.d/lighttpd restart   //每一小时重启apache

我们现在的需要是:每隔10分钟执行一次 auto-run.sh 这个脚本,定时任务按照规则写出来就是:

*/10 * * * * /usr/bin/python3 /root/DDNS-master/run.py     //每10分钟用python3执行run.py一次

* * * * * * "/usr/bin/python3 /root/DDNS-master/run.py" >> /tmp/ddns.log  //每1分钟用python3执行run.py一次,并写入ddns.log这个日志里面。

我们先查看一下crontab里面现在的定时任务,执行 crontab -l 查看,如下:

root@armbian:~/DDNS-master# crontab -l
no crontab for root

执行 crontab -e 进行编辑,打开默认如下: 

将我们上面的命令,敲上去,如下:

 执行后出现错误,会自动进入编辑界面

经过检查发现,星号多了一个,应该是5个星号

将命令单独拿出来执行,提示没有config.json文件,自动又创建了一个,不知道创建到哪里了,于是使用查找命令,查找这个文件,如下:

root@armbian:~# find / -name config.json
/root/DDNS-master/config.json
/tmp/config.json

你可能感兴趣的:(linux,服务器,运维)