指点成金-最美分享吧

登录

Mac执行定时任务之Launchctl

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了Mac执行定时任务之Launchctl相关的知识,希望对你有一定的参考价值。

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

一、编写一个plist文件

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

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

这个是一个完整的 plist 文件:

<plist version="1.0"><dict>    <key>Labelkey>    <string>com.denglibing.checkinstring>    <key>RunAtLoadkey>    <true/>    <key>ProgramArgumentskey>    <array> <string>/Users/denglibing/Desktop/denglibing_checkin/denglibing_checkin_request.shstring>    array>    <key>StartCalendarIntervalkey>    <array>        <dict>            <key>Weekdaykey>            <integer>1integer>            <key>Hourkey>            <integer>8integer>            <key>Minutekey>            <string>58string>        dict>        <dict>            <key>Weekdaykey>            <integer>2integer>            <key>Hourkey>            <integer>8integer>            <key>Minutekey>            <string>52string>        dict>    array>    <key>StandardOutPathkey>    <string>/Users/denglibing/Desktop/denglibing_checkin/outlogstring>    <key>StandardErrorPathkey>    <string>/Users/denglibing/Desktop/denglibing_checkin/errorlogstring>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 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执行定时任务之Launchctl的主要内容,如果未能解决你的问题,请参考以下文章