Ubuntu开机自动开启Clash

每次开机都要自己输命令运行Clash的开启脚本

看一下如何让系统能够自动开启clash代理。下面尝试了两种方法,systemd和crontab,前者失败了,后者成功了。

方法1:使用systemd服务

  1. 创建一个新的服务文件。打开终端,输入以下命令:
1
sudo nano /etc/systemd/system/clash-start.service
  1. 在打开的文件中添加以下内容:
1
2
3
4
5
6
7
8
9
[Unit]
Description=Start Clash for Linux
After=network.target
[Service]
ExecStart=/home/thinkerhui/下载/clash-for-linux-backup/start.sh
User=thinkerhui
Restart=always
[Install]
WantedBy=multi-user.target
  1. 确保 User 字段中的用户名与你的用户名匹配。
  2. 保存并关闭文件。
  3. 启用该服务以在启动时自动运行:
1
sudo systemctl enable clash-start.service
  1. 若要立即测试服务是否正常工作,可以使用:
1
sudo systemctl start clash-start.service

经过实测不太行,决定不使用该方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 停止服务
sudo systemctl stop clash-start.service

# 禁用服务
sudo systemctl disable clash-start.service

# 删除服务文件
sudo rm /etc/systemd/system/clash-start.service

# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 检查服务状态
sudo systemctl status clash-start.service

但是经过仔细的分析,其实问题在于我的start.sh脚本

其实开启clash并不需要重新拉去订阅文件并配置那么多东西,只要启动一下clash其实就好了。

于是定制了一个脚本:clash-start.sh,并按照上面systemd的方法重新搞一遍。

发现它会高速不断执行,看来只要启动一次就好了

以下是 Restart 指令的常见取值及其含义:

  • no:默认值,服务不会自动重启。
  • on-success:仅当服务正常退出(退出状态码为0)时重启。
  • on-failure:当服务因非正常原因(如崩溃或被信号终止)退出时重启。
  • on-abnormal:当服务因被信号终止或超时而退出时重启。
  • on-watchdog:当服务因看门狗超时而退出时重启。
  • on-abort:当服务因接收到abort信号而退出时重启。
  • always:无论服务如何退出,总是重启。

看来设定always其实是错误的,因为我的这个是脚本,应该是因非正常原因退出才要重启。

故修改为Restart:on-failure

立即测试一下发现可以正常运行。重启了之后发现似乎不太行,但是手动执行却可以。我合理怀疑是执行的时机不太对。于是把after:network 改为after:network-online.target ,发现还是不行。。。

决定再次放弃这种做法。

方法2:Crontab

发现这种方法甚至更简单。

打开crontab配置进行修改:

1
crontab -e

一开始选择了vscode来编辑,发现对它的支持并不好,直接检测不出来:

1
2
3
4
5
6
7
8
9
10
11
(base) thinkerhui@thinkerhui-Redmi-Book-Pro-15-2022:~$ crontab -e
no crontab for thinkerhui - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /usr/bin/code
4. /bin/ed

Choose 1-4 [1]: 3
No modification made

只好换成nano:

1
2
3
4
5
6
7
8
9
(base) thinkerhui@thinkerhui-Redmi-Book-Pro-15-2022:~$ select-editor 

Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
3. /usr/bin/code
4. /bin/ed

Choose 1-4 [1]: 1

重新打开crontab配置并在打开的文本末尾添加:

1
@reboot /home/thinkerhui/下载/clash-for-linux-backup/clash-start.sh

经过重启测试,成功了!

感觉crontab确实比systemd要方便许多,至于systemd的方法为什么会失败,我就不追究了。


Ubuntu开机自动开启Clash
http://thinkerhui.site/2024/11/12/技术记录/Ubuntu开机自动开启Clash/
作者
thinkerhui
发布于
2024年11月12日
许可协议