因为总所周知的原因,GitHub在国内的访问是不稳定的,经常抽风,不使用一点科学的手段没有办法很好的进行访问,所以就有通过获取GitHub最新的可访问的ip,手动更新到系统的hosts文件中的办法来应对
fetch-github-hosts
官网的介绍:fetch-github-hosts 是主要为解决研究及学习人员访问 Github 过慢或其他问题而提供的 Github Hosts 同步工具
官网链接:https://hosts.gitcdn.top/
对于Windows系统,我们可以直接下载fetch-github-hosts客户端的方式很方便的对hosts进行更新,也可以通过手动的方式修改hosts,只需要将:https://hosts.gitcdn.top/hosts.txt 中的内容复制到hosts文件中即可
Cron
Ubuntu 系统中自带Cron服务,通过cron服务我们可以很方便的编写一些计划任务,让它定时的为我们执行
crontab 的用法如下:
usage: crontab [-u user] file
crontab [ -u user ] [ -i ] { -e | -l | -r }
(default operation is replace, per 1003.2)
-e (edit user's crontab)
-l (list user's crontab)
-r (delete user's crontab)
-i (prompt before deleting user's crontab)
常用的命令
crontab -u root -e #编辑用户 root 的计划任务文件(需要有 root 权限)
crontab -e #编辑当前用户的计划任务文件
crontab -u root -l #显示用户 root 的计划任务文件(需要有 root 权限)
crontab -l #显示当前用户的计划任务文件
crontab -r #删除当前用户的计划任务文件
cron 语法格式
m h dom mon dow command
0-59 0-23 1-31 1-12 0-7 command
m 表示分钟 0-59
h 表示小时 0-23
dom day of month,表示日期 1-31
mon month,表示月份 1-12
dow day of week,表示星期 0-7
command 待执行的命令 -
需要特殊说明的是,dow 的取值范围为 0-7 共 8 个数,1-6 分别表示周一-周六,0 和 7 均表示周日
另外需要使用一些特殊符号实现灵活的配置:
使用Cron定时执行sh更新GitHub Hosts
首先编写一个sh脚本
# 创建一个文件夹 可自定义
mkdir /data/crontab_task
mkdir /data/crontab_task/log
# 创建一个sh脚本
vim set_github_hosts.sh
接着写入内容
#!/bin/bash
start_text="Start update github hosts. Current time: "
current_time=$(date "+%Y-%m-%d %H:%M:%S")
starting=$start_text$current_time
echo "-----------------------------------------------------------------"
echo $starting
sed -i "/# fetch-github-hosts begin/Q" /etc/hosts && curl https://hosts.gitcdn.top/hosts.txt >> /etc/hosts
echo "Down."
按下esc并输入wq
保存
赋予sh可执行权限
chmod u+x set_github_hosts.sh
编写cron表达式
crontab -e
此时在文件的最后添加以下内容:
*/60 * * * * /data/crontab_task/set_github_hosts.sh >> /data/crontab_task/log/set_github_hosts.log 2>&1
保存后,重启cron服务即可,service cron restart
。
一段时间后就可以去log目录下查看执行的日志,正确执行的情况下是一直会更新日志的