Mac执行定时任务之Launchctl

本文介绍如何使用launchctl在Mac上执行定时任务。包括编写plist文件、定时脚本、plist文件位置及加载命令等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

launchctl是一个统一的服务管理框架,启动、停止和管理守护进程、应用程序、进程和脚本。下面讲述一下如何在Mac上使用launchctl执行定时任务。

一、编写一个plist文件

launchctl 将根据这个plist文件的信息来启动任务,plist文件中的关键字可以在 苹果官方文档 找到,值得注意的是 Label 对应的值需要保证唯一性,作为任务的唯一标示。可以使用如下命令来验证plist格式的正确性(不代表命令有效):

$ plutil-lint /Users/denglibing/Library/LaunchAgents/com.denglibing.checkin.plist

这个是一个完整的 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.denglibing.checkin</string>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array> <string>/Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh</string>
    </array>
    <key>StartCalendarInterval</key>
    <array>
        <dict>
            <key>Weekday</key>
            <integer>1</integer>
            <key>Hour</key>
            <integer>8</integer>
            <key>Minute</key>
            <string>58</string>
        </dict>
        <dict>
            <key>Weekday</key>
            <integer>2</integer>
            <key>Hour</key>
            <integer>8</integer>
            <key>Minute</key>
            <string>52</string>
        </dict>
    </array>
    <key>StandardOutPath</key>
    <string>/Users/denglibing/Desktop/denglibing_checkin/outlog</string>
    <key>StandardErrorPath</key>
    <string>/Users/denglibing/Desktop/denglibing_checkin/errorlog</string>
</dict>
</plist>
二、编写定时脚本

即上面plist文档中的 denglibing_checkin_request.sh 脚本,以最简单的为例 (打开脚本):

# denglibing_checkin_request.sh
$ open /Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh

值得注意的是,需要设置这个脚本为可执行文件:

$ chmod a+x /Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.sh
三、plist文件的位置
* ~/Library/LaunchAgents 由用户自己定义的任务项
* /Library/LaunchAgents 由管理员为用户定义的任务项
* /Library/LaunchDaemons 由管理员定义的守护进程任务项
* /System/Library/LaunchAgentsMac OS X为用户定义的任务项
* /System/Library/LaunchDaemonsMac OS X定义的守护进程任务项

建议放在 ~/Library/LaunchAgents 下面。

/System/Library和/Library和~/Library目录的区别?
/System/Library目录是存放Apple自己开发的软件。
/Library目录是系统管理员存放的第三方软件。
~/Library/是用户自己存放的第三方软件。

LaunchDaemons和LaunchAgents的区别?
LaunchDaemons是用户未登陆前就启动的服务(守护进程)。
LaunchAgents是用户登陆后启动的服务(守护进程)。
四、加载命令
# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上
$ launchctl load -w com.denglibing.checkin.plist

# 删除任务
$ launchctl unload -w com.denglibing.checkin.plist

# 查看任务列表, 使用 grep '任务部分名字' 过滤
$ launchctl list | grep 'com.denglibing'
五、总结

launchctl在定时启动任务非常简单和方便,值得注意的地方就是 plist 文件了。

1、Label:对应的需要保证全局唯一性;
2、Program:要运行的程序;
3、ProgramArguments:命令语句
4、StartCalendarInterval:运行的时间,单个时间点使用dict,多个时间点使用 array <dict>
5、StartInterval:时间间隔,与StartCalendarInterval使用其一,单位为秒
6、StandardInPath、StandardOutPath、StandardErrorPath:标准的输入输出错误文件,这里建议不要使用 .log 作为后缀,会打不开里面的信息。
7、定时启动任务时,如果涉及到网络,但是电脑处于睡眠状态,是执行不了的,这个时候,可以定时的启动屏幕就好了。
六、相关链接

Mac上,执行定时任务:launchctl

苹果官方文档:The Mac OS X launchd plist format | launchd plist file format (valid keys) | alvinalexander.com

多个时间点启动任务

Mac下,可以使用以下两种方法设置定时任务: 1. 使用cronjob cronjob是Mac OS中自带的任务管理器。可以通过以下步骤设置定时任务: 打开终端,输入以下命令: ``` crontab -e ``` 这将打开cronjob的编辑页面。在页面中添加你想要执行的命令及其执行时间。例如,如果你想每天晚上8点执行一个Python脚本,可以添加以下内容: ``` 0 20 * * * /usr/bin/python /path/to/your/script.py ``` 这将在每晚8点执行script.py文件。 2. 使用launchd launchd是Mac OS的系统级别的任务管理器。可以通过以下步骤设置定时任务: 创建一个plist文件,该文件包含你想要执行的命令及其执行时间。例如,以下是一个用于每天晚上8点执行Python脚本的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.pythonjob</string> <key>ProgramArguments</key> <array> <string>/usr/bin/python</string> <string>/path/to/your/script.py</string> </array> <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>20</integer> <key>Minute</key> <integer>0</integer> </dict> </dict> </plist> ``` 将该文件保存到~/Library/LaunchAgents目录中。 使用以下命令加载该任务: ``` launchctl load ~/Library/LaunchAgents/com.example.pythonjob.plist ``` 这将在每晚8点执行script.py文件。 无论使用哪种方法,都需要确保Python环境配置正确。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值