使用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的阿里云动态解析服务,在这里
原文链接:https://blog.csdn.net/YZero_cn/article/details/120336178?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168476299816800226563478%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168476299816800226563478&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-11-120336178-null-null.blog_rank_default&utm_term=NAS%E3%80%81%E7%BE%A4%E6%99%96%E3%80%81%E9%98%BF%E9%87%8C%E4%BA%91%E3%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E3%80%81%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E3%80%81ipv6%E3%80%81ddns%E3%80%81%E8%BD%BB%E9%87%8F%E7%BA%A7%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%81%E9%93%81%E5%A8%81%E9%A9%AC%E3%80%81%E5%A8%81%E8%81%94%E9%80%9A%E3%80%81DSM%E3%80%81DSM6.0%E3%80%81%E7%BE%A4%E6%99%96nas%E3%80%81%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%81%E8%9C%97%E7%89%9B%E6%98%9F%E9%99%85%E3%80%81%E9%BB%91%E7%BE%A4%E6%99%96%E3%80%81docker%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E3%80%81%E5%AE%9D%E5%A1%94%E3%80%81%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E3%80%81nginx%E3%80%81frp%E3%80%81%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90