ClashForLinux自动更新订阅配置

Clash是一个基于Golang开发的代理工具,支持Vmess, Shadowsocks, Snell和SOCKS5协议。 本文提供通过shell脚本自动更新Clash在线配置的解决方案。

ClashForLinux自动更新订阅配置
本文提供了通过shell脚本自动更新Clash在线配置的解决方案。

Clash是一个基于Golang开发的代理工具,支持Vmess, Shadowsocks, Snell和SOCKS5协议。Clash也有Android版本和OS X版本,配置文件通用,但是对于Linux,目前似乎还没有人开发自定订阅配置的功能,Clash的作者开发了一个Web UI叫Clash Dashboard,可以在网页中调用相应Restful API调整相关配置,目前的版本(0.3.0)并没有配置订阅功能。

Clash本身可以根据配置文件做到负载均衡和自动切换,因此,如果你的代理服务商提供了在线配置,能够做到实时更新配置的话,将是最省心的选择。

配置

本文通过systemctl来管理Clash的进程,对应clash.service文件,通过两个脚本start-clash.shstop-clash.sh来管理Clash的启停,具体配置如下。

clash.service

[Unit]
Description=clash daemon
After=network.target

[Service]
Type=simple
User=root
#ExecStart=/usr/local/bin/clash -d /root/.config/clash/
#Restart=on-failure
ExecStart=/root/.config/clash/start-clash.sh
ExecStop=/root/.config/clash/stop-clash.sh
Environment="HOME=/root"
Environment="CLASH_URL=https://suo.yt/CNCAfpo"


[Install]
WantedBy=multi-user.target

start-clash.sh

#!/bin/bash
# save this file to ${HOME}/.config/clash/start-clash.sh

# save pid file
echo $$ > ${HOME}/.config/clash/clash.pid

diff ${HOME}/.config/clash/config.yaml <(curl -s ${CLASH_URL})
if [ "$?" == 0 ]
then
    /usr/local/bin/clash -d /root/.config/clash/
else
    curl -L -o ${HOME}/.config/clash/config.yaml ${CLASH_URL}
    /usr/local/bin/clash -d /root/.config/clash/
fi
url -L -o ${HOME}/.config/clash/config.yaml ${CLASH_URL}
    /usr/local/bin/clash -d /root/.config/clash/
fi

stop-clash.sh

#!/bin/bash
# save this file to ${HOME}/.config/clash/stop-clash.sh

# read pid file
PID=`cat ${HOME}/.config/clash/clash.pid`
kill -9 ${PID}
rm ${HOME}/.config/clash/clash.pid

配置添加完成后,执行以下代码就可以启动Clash并设置为开机自启动。

systemctl enable clash
systemctl start clash