Mac上如何开机与关机时自动运行Shell脚本
11 月 24 日, 2020
网上讲如何开机运行脚本的很多,但我有关机时关闭远程服务的需求。于是上外网查了一下如何在关机时执行一段脚本。
新建一个shell文件
这个shell中包含了你需要开机关机时运行的脚本。
#!/bin/bash
function shutdown()
{
# 关机用的脚本放这里
exit 0
}
function startup()
{
# 开机用的脚本放这里
tail -f /dev/null &
wait $!
}
trap shutdown SIGTERM
trap shutdown SIGKILL
startup;
以上文件我取名为launchdeamon,赋予了当前用户的执行权限。
chmod 755 launchdaemon
新建plist文件
为了让launchdeamon能在开机时自动运行,需要编写一个相应plist文件,使用launctl做到开机启动。关于launchctl和plist的作用,请先查看这篇文章:Mac执行定时任务之launchctl。
plist文件的内容如下:
<?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>boot-shutdown</string>
<key>ProgramArguments</key>
<array>
<string>$SCRIPT_PATH/launchdaemon</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>$LOG_PATH/boot-shutdown.log</string>
<key>StandardErrorPath</key>
<string>$PLOG_PATH/boot-shutdown.err</string>
</dict>
</plist>
plist文件以键值对的形式存储信息。以上文件的字段解释:
Label
:标签,也就是运行该plist显示的名字。这里为boot-shutdownProgramArguments
:array
里可以存放多个需要运行程序。这里的$SCRIPT_PATH
请自己修改。RunAtLoad
:开机自启,为true
StandardOutPath
:打印标准输出到某个文件,方便查看程序后台运行的结果,$LOG_PATH
自行修改。StandardErrorPath
:打印标准错误到某个文件,同上。
以上文件我取名为 boot-shutdown-script.plist 。
由于shell脚本的执行权限是当前用户,以上文件需要放入当前用户的开机启动文件夹,即为 ~/Library/LaunchAgents 。
然后将plist文件加入开启启动:
launchctl load ~/Library/LaunchAgents/boot-shutdown-script.plist
此时重启后,可以使用以下命令查看脚本运行状态
launchctl list | grep boot
输出为
438 0 boot-shutdown
第一个是pid。第二个为状态码,为0说明正常运行中。
参考:
更新于 2020-11-24 08:00
Waline