macOS 的守护程序和服务

Daemons and Services in macOS

  • 守护程序: launchd。类似 Linux 中的 systemd,负责初始化、加载、启/停和管理系统服务。
  • 管理命令: launchctl。 类似 Linux 中的 systemctl
  • 配置文件类型是 .plist。存放路径:
    • /Library/LaunchDaemons/,无论是否有任何用户登录系统,它们都应运行。 它们将以“root”权限启动。
    • /Library/LaunchAgents,任意用户登录后
    • ~/Library/LaunchAgents/,某(当前)用户登录后

      其中 ~ 是您的主目录。 这些任务将使用您的权限运行,就像您自己通过命令行或双击 Finder 中的文件启动它们一样。

  1. 编辑 .plist 配置文件
    可参考 官方文档 或下文的“常用配置”章节。

  2. 复制配置文件到规定路径
    文件名称规范和路径示例: /Library/LaunchDaemons/com.name.Name.plist

  3. 为配置文件添加权限
    sudo chown -R root:wheel /Library/LaunchDaemons/com.name.Name.plist

  4. 手动加载服务
    sudo launchctl load /Library/LaunchDaemons/com.name.Name.plist

  5. 手动启动/停止服务
    sudo launchctl start com.example.run_task
    sudo launchctl stop com.example.run_task

  6. 检查运行情况
    查看配置情况: launchctl print system/com.name.Name
    查看服务是否正常正在运行。注意:如果定期执行的程序已关闭,这里不会显示。
    launchctl list | grep 'com.name.Name.plist'
    launchctl blame system/com.name.Name

如果配置文件中设置了日志文件。可通过日志文件查看 stdout 输出,以便于 debug。

  1. 手动卸载服务
    sudo launchctl unload /Library/LaunchDaemons/com.name.Name.plist

  2. 删除掉配置文件

<key>ProgramArguments</key>
<array>
  <string>/Users/Name/Documents/script.sh</string>
</array>
<key>StartInterval</key>
<integer>300</integer>

300 seconds

Like the Unix cron subsystem

<key>StartCalendarInterval</key>
<dict>
	<key>Minute</key>
	<integer>45</integer>
	<key>Hour</key>
	<integer>13</integer>
	<key>Day</key>
	<integer>7</integer>
</dict>

starts the job on the 7th day of every month at 13:45 (1:45 pm).

<key>KeepAlive</key>
<true/>
<key>WatchPaths</key>
<array>
    <string>/etc/hostconfig</string>
</array>

参考文章: