因为总所周知的原因,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目录下查看执行的日志,正确执行的情况下是一直会更新日志的

如果觉得我的文章对你有用,请随意赞赏