笑死,世纪难题(
我用 macOS 也有一段时间了,而在这上面的体验,终有些不足。因为 macOS 的开发者「并不算」很多,以至于一些「特殊需求」的软件没几个能玩的。而对于我来说,又不喜欢妥协,因此就一直在寻求使用类似于 Linux 的 systemd
这类管理程序来实现一些软件的开机自启。
而当我无意间看到 macOS 有 launchd
这种管理程序的时候,我就知道,属于我们的时代来临力 ,我的想法可以实现了
准备
先普及一个知识
plist 在 macOS 上一共存在于五个文件夹中,而 Apple 给出了他们的用途
文件夹 |
用途 |
/系统/资源库/LaunchDaemons |
Apple 提供的系统守护进程 |
/系统/资源库/LaunchAgents |
Apple 提供的基于每个用户且所有用户适用的代理 |
/资源库/LaunchDaemons |
第三方系统守护进程 |
/资源库/LaunchAgents |
基于每个用户且所有用户适用的第三方代理 |
~/资源库/LaunchAgents |
仅适用于登录用户的第三方代理 |
无特殊需求的话,只需要放在最后一个文件夹里就可以,同时以 User 权限运行,可以避免一些由于权限配置错误导致的问题
基本语法为
1 2 3 4 5 6 7 8 9 10 11 12
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>进程名</string> <key>ProgramArguments</key> <array> <string>运行参数</string> </array> </dict> </plist>
|
这样便构成了一个基本的使用方法
一个例子
因为在 Mac 上并没有如同 Windows 一样有各种软件的客户端,一些软件可能在 Mac 上只有 Core 你说连 Core 都没有?那换个玩吧
所以我便以一个 vs 的核心为例,因为某些特殊需要,需要常驻后台来运行以及开机自启
因此就可以这么实现
1
| nano ~/Library/LaunchAgents/verysimple.plist
|
然后填入如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>verysimple</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>ProcessType</key> <string>Background</string> <key>ProgramArguments</key> <array> <string>./verysimple</string> <string>-c</string> <string>client.toml</string> </array> <key>WorkingDirectory</key> <string>/Users/leaoduan/vs</string> </dict> </plist>
|
其中,第 17 行 的 client.toml
是配置文件,第 20 行的是运行目录。
需要注意,所有包含路径的部分需要是绝对目录,可以在终端里打 pwd
查看绝对路径
然后加载这个配置文件,并启动
1 2
| launchctl load ~/Library/LaunchAgents/verysimple.plist launchctl start verysimple
|
然后测试,能够正常运行就代表配置成功了
取消加载、删除
如果不需要这个配置文件了,可以通过这种方式来取消加载,最后一步为删除该配置文件
1 2 3
| launchctl stop verysimple launchctl unload ~/Library/LaunchAgents/verysimple.plist rm ~/Library/LaunchAgents/verysimple.plist
|
参考
Mac - 服务管理 launchd、launchctl、LaunchAgent、LaunchDaemon、brew services详解 | Bruce’s Blog
Mac OS Launchd 启动服务详解_卢凯文的博客-CSDN博客_launchd
Mac下使用launchctl创建定时任务 - 简书
Mac使用Launchd命令行lauchctl操作服务的简单用法 - EasonJim - 博客园
在 Mac 上的“终端”中使用 launchd 管理脚本 - 官方 Apple 支持 (中国)