Mac上如何开机与关机时自动运行Shell脚本

网上讲如何开机运行脚本的很多,但我有关机时关闭远程服务的需求。于是上外网查了一下如何在关机时执行一段脚本。

新建一个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文件的内容如下:





Labelboot-shutdown

ProgramArguments

  $SCRIPT_PATH/launchdaemon


RunAtLoad


StandardOutPath
$LOG_PATH/boot-shutdown.log

StandardErrorPath
$PLOG_PATH/boot-shutdown.err



plist文件以键值对的形式存储信息。以上文件的字段解释:

  • Label:标签,也就是运行该plist显示的名字。这里为boot-shutdown
  • ProgramArgumentsarray里可以存放多个需要运行程序。这里的$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说明正常运行中。


参考:

  • Run a script only at shutdown (not log off or restart) on Mac OS X

你可能感兴趣的:(Mac上如何开机与关机时自动运行Shell脚本)