博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mac中的定时任务利器:launchctl
阅读量:5786 次
发布时间:2019-06-18

本文共 2849 字,大约阅读时间需要 9 分钟。

launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。

launchctl是通过配置文件来指定执行周期和任务的。

当然mac也可以像linux系统一样,使用crontab命令来添加定时任务,这里就不赘述,具体可参见:

下面将手把手教你在mac上创建定时任务。(任务目标:每天晚上十点定时执行/Users/demo/helloworld.py的python程序)

1. 创建run.sh脚本

进入 helloworld.py程序所在目录

cd /User/demo
创建run.sh脚本
vi run.sh
添加执行helloworld.py的命令

#!/bin/sh# 记录一下开始时间echo `date` >> /Users/demo/log &&# 进入helloworld.py程序所在目录cd /Users/demo &&# 执行python脚本(注意前面要指定python运行环境/usr/bin/python,根据自己的情况改变)/usr/bin/python helloworld.py# 运行完成echo 'finish' >> /Users/demo/log

:wq保存退出

注意,脚本要改成可执行的权限

chmod 777 run.sh

2. 编写plist文件

launchctl 将根据plist文件的信息来启动任务。

plist脚本一般存放在以下目录:

  • /Library/LaunchDaemons -->只要系统启动了,哪怕用户不登陆系统也会被执行

  • /Library/LaunchAgents -->当用户登陆系统后才会被执行

更多的plist存放目录:

~/Library/LaunchAgents 由用户自己定义的任务项

/Library/LaunchAgents 由管理员为用户定义的任务项
/Library/LaunchDaemons 由管理员定义的守护进程任务项
/System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
/System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项

进入~/Library/LaunchAgents,创建一个plist文件com.demo.plist

Label
com.demo.plist
ProgramArguments
/Users/demo/run.sh
StartCalendarInterval
Minute
00
Hour
22
StandardOutPath
/Users/demo/run.log
StandardErrorPath
/Users/demo/run.err

3. 加载命令

launchctl load -w com.demo.plist

这样任务就加载成功了。

更多的命令:

# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上$ launchctl load -w com.demo.plist# 删除任务$ launchctl unload -w com.demo.plist# 查看任务列表, 使用 grep '任务部分名字' 过滤$ launchctl list | grep 'com.demo'# 开始任务$ launchctl start  com.demo.plist# 结束任务$ launchctl stop   com.demo.plist

如果任务呗修改了,那么必须先unload,然后重新load

start可以测试任务,这个是立即执行,不管时间到了没有
执行start和unload前,任务必须先load过,否则报错
stop可以停止任务

番外篇

plist支持两种方式配置执行时间:
  • StartInterval: 指定脚本每间隔多长时间(单位:秒)执行一次;
  • StartCalendarInterval: 可以指定脚本在多少分钟、小时、天、星期几、月时间上执行,类似如crontab的中的设置,包含下面的 key:
Minute 
The minute on which this job will be run.Hour
The hour on which this job will be run.Day
The day on which this job will be run.Weekday
The weekday on which this job will be run (0 and 7 are Sunday).Month
The month on which this job will be run.
plist部分参数说明:
  1. Label:对应的需要保证全局唯一性;
  2. Program:要运行的程序;
  3. ProgramArguments:命令语句
  4. StartCalendarInterval:运行的时间,单个时间点使用dict,多个时间点使用 array <dict>
  5. StartInterval:时间间隔,与StartCalendarInterval使用其一,单位为秒
  6. StandardInPath、StandardOutPath、StandardErrorPath:标准的输入输出错误文件,这里建议不要使用 .log 作为后缀,会打不开里面的信息。
  7. 定时启动任务时,如果涉及到网络,但是电脑处于睡眠状态,是执行不了的,这个时候,可以定时的启动屏幕就好了。

更多的参数参见:

参考:

转载地址:http://gityx.baihongyu.com/

你可能感兴趣的文章
大型网站架构系列:缓存在分布式系统中的应用(一)
查看>>
linux 驱动学习笔记02--应用实例:在内核中新增驱动代码目录和子目录
查看>>
大型网站架构演变和知识体系
查看>>
.Net反编译工具 .NET Reflector v8.5.0.179 激活
查看>>
Swift 扩展(Extension)总结
查看>>
iOS-WWDC
查看>>
[ZZ] Linux 做三维动画
查看>>
杭电1686--Oulipo(KMP模板) 、 杭电2087--剪花布条
查看>>
团队作业7——alpha阶段之事后诸葛亮分析
查看>>
Infix to postfix without '(' and ')'
查看>>
容器操作使迭代器失效
查看>>
Redis数据类型(上)
查看>>
阿里云部署 Flask + WSGI + Nginx 详解
查看>>
Lightbox改造——支持滚轮缩放
查看>>
使用ASP.Net WebAPI构建REST服务——客户端
查看>>
20135220谈愈敏--信息安全系统设计基础第六周学习总结
查看>>
[转化率预估-1]引言
查看>>
CodeForces 734E Anton and Tree
查看>>
FZU 2184 逆序数还原
查看>>
Javascript[2] - prototype
查看>>