使用springboot中的Scheduled服务代替服务器定时任务crontab,解决linux deploy无法使用定时任务的问题,实现域名动态解析DDNS

Linux Deploy在安卓手机安装LINUX系统_悠闲的三明治的博客-CSDN博客https://blog.csdn.net/weixin_38235758/article/details/79219050?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163179304916780262532989%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163179304916780262532989&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-79219050.first_rank_v2_pc_rank_v29&utm_term=linux+deploy&spm=1018.2226.3001.4187

使用linux deploy App可以将Android设备(手机,平板等)改造成linux服务器,基本上可以实现服务器的各种功能,但是对于指令开关机,定时任务等无能为力,会提示“Running in chroot, ignoring request.”

 开关机指令无所谓,可以直接在手机上操作以实现,但定时任务没有办法,而且对于动态IP地址,地址变动以后若不及时更新dns解析,会失去远程访问能力。

这里我的解决思路是通过部署一个spring boot的jar包并且长期运行,在里面通过@Scheduled,设置定时指令,以代替服务器的crontab功能 (具体实现细节在文末链接)

因为旧手机改造成的服务器放在家庭宽带下,没有ipv4地址,而且ipv6地址也在变化, 我设置的任务是每隔一个小时向阿里云dns更新一次ipv6地址解析

阿里云dns提供了基于java的api接口,可以直接在springboot中调用接口更新解析

实现动态域名解析DDNS (aliyun.com)https://help.aliyun.com/document_detail/141482.html

新建一个类,设置定时任务,定时自动执行@Scheduled注解下面的函数

/**
 * @author Y.zero
 * @date 2021/9/16
 */
public class UpdateTask {
    @Scheduled(cron = "0 0 0/1 * * ? ")
    //定时任务,每隔一小时更新一次
    public void updateTest(){
        //执行更新程序

        //阿里云提供的代码
        DDNS.go();

        //向服务器中记录日志
        Runtime rt = Runtime.getRuntime();
        try {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
            String time =df.format(new Date());
            rt.exec("sed -i '1i\\"+time+"  服务器自动更新dns解析' /yzero/logTest/ipv6ddnslog.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

也可以通过GET方法在定时任务规定执行时间以外手动执行更新

直接访问该路径就会开始更新

http://ip地址:springboot项目端口号/ddns

比如:http://192.168.1.199:8090/ddns

就会将局域网中ipv4地址为192.168.1.199的设备的ipv6地址更新到指定的域名中

 需要更新本机地址则将IP地址改成localhost即可

http://localhost:8090/ddns

    @GetMapping("/ddns")
    @ResponseBody
    //手动实现一次动态域名解析更新
    public String goDDNS(){
        return DDNS.go();
    }

 而像腾讯云等不提供Java接口的,可以通过sh脚本来实现(阿里云也有类似的脚本,但是我没有试过)

利用shell脚本,实现腾讯云DNSPod进行DDNS动态域名解析ipv6地址_FlySky的发问时间-CSDN博客https://blog.csdn.net/weixin_43978546/article/details/113222378利用Java中的Runtime包可以调用linux指令,通过指令调用sh脚本实现域名动态解析


/**
 * @author Y.zero
 * @date 2021/9/16
 */
public class UpdateTask {
    @Scheduled(cron = "0 0 0/1 * * ? ")
    //定时任务,每隔一小时更新一次
    public void updateTest(){
        Runtime rt = Runtime.getRuntime();
        //将需要执行的指令写成字符串
        String command = "bash /yzero/ddns.sh";
        try {
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss");
            String time =df.format(new Date());
            //执行指令
            rt.exec(command);
            //向服务器中添加日志
            rt.exec("sed -i '1i\\"+time+"  服务器自动更新dns解析' /yzero/logTest/ipv6ddnslog.txt");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以上就是我通过使用springboot中的Scheduled服务代替服务器定时任务crontab,解决linux deploy无法使用定时任务的问题,实现域名动态解析DDNS的全部思路了

关于基于java的阿里云动态解析服务,在这里

通过java springboot实现阿里云dns动态解析_YZero_cn的博客-CSDN博客icon-default.png?t=L892https://blog.csdn.net/YZero_cn/article/details/120337681

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值