macOS launchd

launchd 是 macOS 的系统启动和服务管理工具,相当于 Linux 的 systemd

文件路径:

  • ~/Library/LaunchAgents:仅适用于登录用户的第三方代理

  • /Library/LaunchAgents:基于每个用户且所有用户适用的第三方代理

  • /Library/LaunchDaemons:第三方系统守护进程

  • /System/Library/LaunchAgents:Apple 提供的基于每个用户且所有用户适用的代理

  • /System/Library/LaunchDaemons:Apple 提供的系统守护进程

  • launchd 区分代理和守护进程。主要区别在于代理是代表登录用户运行的,而守护进程是代表根用户或通过 UserName 键指定的任何用户运行的。只有代理可以访问 macOS GUI。

  • 配置文件命名方式为 com.example.myjob.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>com.example.myjob</string>

    <!-- 程序参数 -->
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/your/script</string> <!-- 脚本或程序路径 -->
        <string>argument1</string> <!-- 可选参数 -->
        <string>argument2</string> <!-- 可选参数 -->
    </array>

    <!-- 定时 -->
    <key>StartInterval</key>
    <integer>3600</integer> <!-- 3600 秒运行一次 -->

    <!-- 可选:在加载时立即运行 -->
    <key>RunAtLoad</key>
    <true/>
</dict>
</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>com.example.myjob</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/your/script</string>
    </array>

    <!-- 定点 -->
    <key>StartCalendarInterval</key>
    <dict>
        <key>Minute</key>
        <integer>0</integer>
        <key>Hour</key>
        <integer>12</integer>
    </dict>
</dict>
</plist>

管理任务

launchctl 中的许多子命令都需要一个指示子命令目标域或服务的指定符。指定符可以采用以下形式之一:

  • system/[service-name]:系统域
  • user/<uid>/[service-name]:用户域
  • login/<asid>/[service-name]:登录域
  • gui/<uid>/[service-name]:GUI 域
  • pid/<pid>/[service-name]:PID 域
launchctl enable <service-target>     # 启用任务
launchctl disable <service-target>    # 禁用任务
launchctl kickstart <service-target>  # 立即运行任务
launchctl blame <service-target>      # 描述服务启动原因
launchctl print <service-target>      # 打印服务信息

传统命令:

launchctl start <label>               # 启动任务
launchctl stop <label>                # 停止任务
launchctl load <path>                 # 加载指定的配置文件
launchctl remove <label>              # 移除任务
launchctl list                        # 列出所有加载到 launchd 中的任务
launchctl manageruid                  # 打印与调用者 launchd 上下文关联的 UID
launchctl help                        # 打印帮助

参考:

本文作者:Undefined443

本文链接:https://www.cnblogs.com/Undefined443/p/18805963

版权声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

posted @   Undefined443  阅读(1)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起