0%

clash-arch自启更新订阅

linux下clash不会自动更新订阅。只好自己去看看怎么写了。我对systemd不太熟悉所以只好去参考下别人的写法。

好像用不了了,不知道哪里出问题了,懒得改了。。

参考链接:

安装

1
pacman -S clash

自启配置

通过systemctl来管理Clash的进程,对应clash.service文件,并且通过两个脚本start-clash.shstop-clash.sh实现开启时更新订阅。
/usr/lib/systemd/system/[email protected]文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/usr/lib/systemd/system/[email protected]
[Unit]
Description=A rule based proxy in Go for %i.
After=network.target

[Service]
WorkingDirectory="your home directory"/.config/clash
Type=simple
User=%i
Restart=on-abort
ExecStart="your home directory"/.config/clash/start-clash.sh
ExecStop="your home directory"/.config/clash/stop-clash.sh

[Install]
WantedBy=multi-user.target

start-clash.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

#设置clash目录
CLASH_DIR="${HOME}/.config/clash"

#保存PID文件
echo $$ > ${CLASH_DIR}/clash.pid

# 订阅链接下载地址
CLASH_URL="你的订阅链接"

# 对比新的文件和旧的文件有什么不同
diff ${CLASH_DIR}/config.yaml <(curl -s ${CLASH_URL})

#如果两个文件一致,就直接开启clash,如果不一致就生成备份旧文件并下载替换新的文件
if [ "$?" == 0 ]
then
/usr/bin/clash
else
TIME=`date +'+%Y-%m-%d %H:%M%S'`
/usr/bin/cp ${CLASH_DIR}/config.yaml "${CLASH_DIR}/config.yaml.bak${TIME}"
curl -L -o ${CLASH_DIR}/config.yaml ${CLASH_URL}
/usr/bin/clash
fi

stop-clash.sh

1
2
3
4
5
6
7
8
#!/bin/bash

$CLASH_DIR="${HOME}/.config/clash"
PID=`cat ${CLASH_DIR}/clash.pid`

kill -9 ${PID}

/usr/bin/rm ${CLASH_DIR}/clash.pid

写好后,需要给两个sh文件执行权限。

1
chmod +x stop-clash.sh start-clash.sh

使用systemctl管理

1
2
systemctl enable clash
systemctl start clash