星期日, 一月 15, 2023

161 clash meta windows 内核, 以服务模式运行

前面的文章提到, meta内核一些方面做得很好, 比如代理服务器可以单独配置dns来解析, rules provider的url域名, 也可以根据rules判断规则进行解析. 这货也有十分气人的地方, 那就是以服务模式运行. 

最近一直在研究clash, 包括premium和meta两个分支. 最后选择了meta, 但是这货以服务运行一直有问题, 有大问题...

我倾向于把meta核做成系统服务, 因为服务可以在用户登录windows前运行起来, 而开机自启项不行, 必须是用户登录后.

如果直接写一个sc, 带上meta.exe和配置文件目录.\data, 它会在运行了几分钟之后闪退(我的yaml配置没有任何问题)

sc create "1meta" binpath= "%~dp0meta.exe -d \".\data\"" start= auto displayname= "1meta" type= own error= ignore

如果我写一个独立的exe, 让这个独立的exe注册为服务, 每次开机把clash meta内核调起来, 那么会有两种情况: 
要么我的独立exe无法调起meta内核, 就这样一直几M的内存占用; 

要么就是他妈的调起来meta内核, 内核1GB+的内存占用;

尝试用clash for windows 的 service.exe 小工具注册服务, 问题依旧. 
尝试用 administrator 身份以服务方式自启独立exe或者meta内核, 问题依旧. 
尝试把服务注册成 start= delayed-auto (延迟自启动), 有时候行, 有时候不行, 而且这个等的时间太长了. demand (手动) 这个也不行. 
尝试把服务注册成 type= share 也不行. 服务名后面还会出现几位随机字符. 


我怀疑过自己写的独立exe有问题, 但又能有啥问题... 就三行代码, 两行引用库, 一行执行进程(非shell), 在登录进系统之后, 双击这个exe都能正常运行. 


为啥clash meta以服务模式运行做不好, 我怀疑是这货在静默状态(loglevel: silent)依旧进行初始化时的日志输出.

最后找到了个工具 AlwaysUp, 有点类似 linux 的 supervisord, 守护进程监控的一款软件, 简单配置一下就行. 以管理员身份运行, 不要以默认的system身份运行. 没错, 权限要低一点, 不然抽风... 另外, 建议把内存占用监控打开, 还有开机后等待x秒后再运行, AlwaysUp这个破解版很多, 有注册机, 自己找吧. 发几张截图: 





守护服务的进程占用也就4MB左右. Clash meta 进程占用约40-50MB左右. 

我也不知道为什么用了一个工具它就正常了... 总之凑合用吧, 额外4MB内存的服务自启项我还是给得起的. 


当前clash meta内核版本号: 1.14.1

0 条评论: