LaunchAgent

SwiftPM Swift5.2 license build coverage

LaunchAgent 提供了一种简便的方法,以编程方式创建和维护 launchd 代理和守护进程,而无需手动构建属性列表(Property Lists)。

请查看完整的 文档

LaunchAgent

LaunchAgent 可以使用程序参数数组创建

LaunchAgent(label: "local.PythonServer", program: ["python", "-m", "SimpleHTTPServer", "8000"])

或者使用可变参数创建

LaunchAgent(label: "local.PythonServer", program: "python", "-m", "SimpleHTTPServer", "8000")

也可以仅使用标签创建代理,但如果加载它将无效

LaunchAgent(label: "local.PythonServer")

创建新代理时需要将其写入磁盘

let agent = LaunchAgent(label: "local.PythonServer", program: "python", "-m", "SimpleHTTPServer", "8000")

do {
    try LaunchControl.shared.write(agent)
    try agent.load()
    agent.start()
} catch {
    print("Unexpected error:" error)
}

使用 LaunchControl 读取和写入 LaunchAgent

LaunchControl 类可以从 ~/Library/LaunchAgents 读取代理,并将代理写入其中。使用任一方法时,都将设置已加载代理的 url

控制 LaunchAgent

LaunchAgent 具有 load()unload()start()stop()status() 方法,它们的功能与其名称一致。

加载(Load)和卸载(Unload)需要设置代理的 URL 参数,否则 launchctl 将无法找到它们。启动(Start)、停止(Stop)和状态(Status)的调用基于标签。

支持的键(Keys)

LaunchAgent 目前不支持所有键,并且对某些支持的键有一些注意事项。

LaunchAgent 类中的大多数参数都是可选的,设置 nil 将从编码的 plist 中删除该键。某些键使用其自身的类型来封装复杂的字典值。

基本配置

键名 键类型 是否支持 注释
Label(标签) String(字符串)
Disabled(已禁用) String(字符串)
Program(程序) String(字符串)
ProgramArguments(程序参数) [String](字符串数组)
EnableGlobbing(启用全局匹配) Bool(布尔值) 在 macOS 中已弃用

Program(程序)

键名 键类型 是否支持 注释
workingDirectory(工作目录) String(字符串)
standardInPath(标准输入路径) String(字符串)
standardOutPath(标准输出路径) String(字符串)
standardErrorPath(标准错误路径) String(字符串)
environmentVariables(环境变量) [String: String](字符串键值对)

运行条件

键名 键类型 是否支持 注释
runAtLoad(加载时运行) Bool(布尔值)
startInterval(启动间隔) Int(整数)
startCalendarInterval(启动日历间隔) StartCalendarInterval
startOnMount(挂载时启动) Bool(布尔值)
onDemand(按需启动) Bool(布尔值)
keepAlive(保持运行) Bool(布尔值)
watchPaths(监视路径) [String](字符串数组)
queueDirectories(队列目录) [String](字符串数组)

安全

键名 键类型 是否支持 注释
umask Int(整数) 使用 FilePermissions.umaskDecimal 获取有效值
sessionCreate(创建会话) Bool(布尔值)
groupName(组名) String(字符串)
userName(用户名) String(字符串)
initGroups(初始化组) Bool(布尔值)
rootDirectory(根目录) String(字符串)

运行约束

键名 键类型 是否支持 注释
launchOnlyOnce(仅启动一次) Bool(布尔值)
limitLoadToSessionType(限制加载到会话类型) [String](字符串数组) 始终编码为数组
limitLoadToHosts(限制加载到主机) [String](字符串数组)
limitLoadFromHosts(限制从主机加载) [String](字符串数组)

控制

键名 键类型 是否支持 注释
AbandonProcessGroup(放弃进程组) Bool(布尔值)
EnablePressuredExit(启用受压退出) Bool(布尔值)
EnableTransactions(启用事务) Bool(布尔值)
ExitTimeOut(退出超时) Int(整数)
inetdCompatibility(inetd 兼容性) inetdCompatibility(inetd 兼容性)
HardResourceLimits(硬资源限制) ResourceLimits(资源限制)
SoftResourceLimits(软资源限制) ResourceLimits(资源限制)
TimeOut(超时) Int(整数)
ThrottleInterval(节流间隔) Int(整数)

IPC

键名 键类型 是否支持 注释
MachServices [String: MachService](字符串 MachService 键值对)
Sockets

调试

键名 键类型 是否支持 注释
调试 Bool(布尔值) 已弃用
WaitForDebugger(等待调试器) Bool(布尔值)

性能

键名 键类型 是否支持 注释
LegacyTimers(旧计时器) Bool(布尔值)
LowPriorityIO(低优先级 IO) Bool(布尔值)
LowPriorityBackgroundIO(低优先级后台 IO) Bool(布尔值)
Nice Int(整数)
ProcessType(进程类型) ProcessType 枚举

自定义键类

StartCalendarInterval

StartCalendarInterval 封装了用于设置基于日历的任务间隔的字典。默认情况下,所有值都设置为 nil,这意味着任务将在该值的任何出现时运行。

Month(月)和 Weekday(星期)键由每个月和星期的枚举表示。Day(日)、Hour(时)和 Minute(分)值只是整数。 它们会检查其各自时间范围内的有效性,并将根据超出范围的方式设置为最小值或最大值。

inetdCompatibility(inetd 兼容性)

封装了 inetdCompatibilitywait 键。

ResourceLimits(资源限制)

封装了 SoftResourceLimits(软资源限制)和 HardResourceLimits(硬资源限制)键

FilePermissions

用于读取、写入和执行的各个权限 Unix 位。

Unix 权限

此外,您还可以获取 umask 值。

为 LaunchAgent 设置权限时,请使用 .umaskDecimal 获取该值。 如果您正在读取 LaunchAgent,FilePermissions(umask:) 将读取十进制值,以便可以更新权限。