macos开机自动执行shell脚本
在 macOS 上设置开机或用户登录后自动执行 Shell 脚本,最现代且可靠的方法是使用 launchd
。这是 Apple 官方推荐的用于管理守护进程和服务的系统。
相比于老旧的 crontab
或简单的“登录项”,launchd
提供了更强大的控制能力和稳定性。
1.1 解决方案:使用 launchd
创建用户代理 (User Agent)
这个方法会在登录到 Mac 用户账户后,自动以后台方式执行指定的脚本。
1.1.1 📝 第 1 步:创建 .plist
配置文件
首先,创建一个 .plist
格式的 XML 配置文件。这个文件会告诉 launchd
要做什么。
打开“终端” (Terminal) 应用程序。
创建一个新的
.plist
文件。~/Library/LaunchAgents/com.user.jetbrains-activate.plist
。这个目录是存放用户级别launchd
任务的地方。1
vi ~/Library/LaunchAgents/com.user.jetbrains-activate.plist
将以下内容粘贴到编辑器中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26<!-- ~/Library/LaunchAgents/com.user.jetbrains-activate.plist -->
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.jetbrains-activate</string>
<key>ProgramArguments</key>
<array>
<string>/bin/zsh</string>
<string>/Users/username/Environments/JetBrainsActivateTools/scripts/install.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<!-- === 调试日志部分 === -->
<key>StandardOutPath</key>
<string>/Users/username/tmp/jetbrains-activate.stdout.log</string>
<key>StandardErrorPath</key>
<string>/Users/username/tmp/jetbrains-activate.stderr.log</string>
<!-- ======================= -->
</dict>
</plist>重要:修改脚本路径!
请将上面代码中的/Users/username/
替换成您自己的实际用户名称。例如,如果您的用户名是david
,那么路径就是/Users/david/Environments/JetBrainsActivateTools/scripts/install.sh
。保存并退出编辑器。
1.1.2 ⚙️ 第 2 步:确保脚本具有执行权限
为了让 launchd
能够成功运行您的脚本,您必须给脚本文件添加可执行权限。
在终端中运行以下命令:
1 | chmod +x /Users/username/Environments/JetBrainsActivateTools/scripts/install.sh |
同样,记得替换 username
为您的实际用户名。
1.1.3 🚀 第 3 步:加载并启动 launchd
任务
现在,您需要告诉 launchd
加载您刚刚创建的这个新任务。
加载任务:
在终端中运行以下命令,它会加载您的.plist
文件并使其生效。1
launchctl load ~/Library/LaunchAgents/com.user.jetbrains-activate.plist
(可选) 立即测试:
如果您想立即测试脚本是否能被launchd
正常执行,而不是等下次登录,可以运行以下命令来手动启动一次任务:1
launchctl start com.user.jetbrains-activate
您可以检查脚本执行后的预期效果来判断是否成功。
如果修改了 plist 文件,那么必须先 卸载 (unload) 然后再 加载 (load) 任务。
1
2launchctl unload ~/Library/LaunchAgents/com.user.jetbrains-activate.plist
launchctl load ~/Library/LaunchAgents/com.user.jetbrains-activate.plist
1.2 ✨ 一切就绪
现在,您的设置已经全部完成。从下一次您登录 Mac 开始,install.sh
脚本就会在后台自动为您执行。
1.3 其他信息与管理命令
为什么要用
/bin/sh
?
在ProgramArguments
中,第一个参数是执行器,第二个参数才是您的脚本。直接使用/bin/sh
或/bin/zsh
来运行您的.sh
脚本是更稳妥的做法。如何停止并卸载这个自动任务?
如果您以后不希望再自动执行此脚本,可以按以下步骤操作:卸载任务:
1
launchctl unload ~/Library/LaunchAgents/com.user.jetbrains-activate.plist
(可选)删除文件:
1
rm ~/Library/LaunchAgents/com.user.jetbrains-activate.plist
如果脚本需要管理员权限怎么办?
如果您的脚本需要sudo
权限,那么配置会更复杂。您需要将.plist
文件放置在系统的/Library/LaunchDaemons
目录下,并修改一些键值。但根据您的需求(在当前用户下执行),目前的方法是最佳选择。