launchctl是一个统一的服务管理框架,可以启动、停止和管理守护进程、应用程序、进程和脚本等。
launchctl是通过配置文件来指定执行周期和任务的。

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

下面将手把手教你在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

<?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><!-- Label唯一的标识 --><key>Label</key><string>com.demo.plist</string><!-- 指定要运行的脚本 --><key>ProgramArguments</key><array><string>/Users/demo/run.sh</string></array><!-- 指定要运行的时间 --><key>StartCalendarInterval</key><dict><key>Minute</key><integer>00</integer><key>Hour</key><integer>22</integer></dict>
<!-- 标准输出文件 -->
<key>StandardOutPath</key>
<string>/Users/demo/run.log</string>
<!-- 标准错误输出文件,错误日志 -->
<key>StandardErrorPath</key>
<string>/Users/demo/run.err</string>
</dict>
</plist>

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 <integer>
The minute on which this job will be run.
Hour <integer>
The hour on which this job will be run.
Day <integer>
The day on which this job will be run.
Weekday <integer>
The weekday on which this job will be run (0 and 7 are Sunday).
Month <integer>
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. 定时启动任务时,如果涉及到网络,但是电脑处于睡眠状态,是执行不了的,这个时候,可以定时的启动屏幕就好了。

更多的参数参见:mac官方文档

参考:

Mac执行定时任务之Launchctl

Mac中的定时任务利器:launchctl相关推荐

  1. mac定时执行python_Mac中的定时任务利器:launchctl

    launchctl是一个统一的服务管理框架,可以启动.停止和管理守护进程.应用程序.进程和脚本等. launchctl是通过配置文件来指定执行周期和任务的. 当然mac也可以像linux系统一样,使用 ...

  2. launchctl :MAC 下的定时任务

    launchctl 是一个统一的服务管理框架,可以启动.停止和管理进程.应用程序.脚本等. launchctl 可以通过 plist 文件来指定执行周期性任务. 查看已存在的任务 ~/Library/ ...

  3. mac中修改系统限制量--ulimit和sysctl

    在*nux中,对于每个用户,系统限制其最大进程数.文件数--.为提高性能,可以根据设备资源情况,设置各用户的最大进程数,文件数等等 在mac中,要设置这些系统值,也使用这些命令. 可以用ulimit ...

  4. mac中使用 sourcetree 的快速配置和git服务器登录

    问题: 1.mac中下载sourcetree配置仓库地址,一直在提示输入密码,无法登录成功,更无法获取源码. 2.找不到配置仓库时的账号密码,只看到地址. 场景: git服务器:自己的GIT服务器,非 ...

  5. mac怎么用python3.0_怎么在mac中使用python

    怎么在mac中使用python 发布时间:2020-07-13 15:05:43 来源:亿速云 阅读:95 作者:Leah 这篇文章将为大家详细讲解有关怎么在mac中使用python,文章内容质量较高 ...

  6. Mac中使用port升级gcc版本

    Mac中使用port升级gcc版本 Mac OS中的gcc版本可能不会满足实际使用要求,需要对其升级. 这里介绍使用port方式来升级gcc版本.Macports是Mac OS中的软件包管理工具. 首 ...

  7. 《Python硬件编程实战》——2.8 在Mac中安装Python

    本节书摘来自华章计算机<Python硬件编程实战>一书中的第2章,第2.8节,作者:李茂 著, 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.8 在Mac ...

  8. android中的定时任务一般有两种机制,android 定时任务

    使用timertask进行定时任务 首先创建TimerTask: class SynchroTimerTask extends TimerTask { @Override public void ru ...

  9. 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( “Python“ 因为出现问题而无法打开 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 先安装了 Pytnon3.10.0 版本 , 然后有安装了 Python3.6.3 版本 , 安装完成后 , IntelliJ IDEA 中就出现如 ...

最新文章

  1. 直方图(opencv)
  2. Android开发中反编译时出现Unsupported major.minor version 51.0错误的问题
  3. Win32控制台程序如何使用CString的方法
  4. UVA - 12569 Planning mobile robot on Tree (EASY Version) BFS
  5. Jetty架构解析及应用示例
  6. Android 浮窗开发之窗口层级
  7. Ember.js 入门指南——番外篇,路由、模板的执行、渲染顺序
  8. python 客户端_Python客户端
  9. 获取url路径上的参数,(避免中文乱码)
  10. 如何使用API爬取数据,它和网页爬虫有什么区别?
  11. Eclipse的环境设置
  12. xss php漏洞扫描工具,XSpear:一款强大的XSS漏洞扫描器工具
  13. EXE4J 错误提醒 Pleasedefine EXE4J_JAVA_HOME to point to an installes 64-bit JDK or JRE
  14. 使用gsds绘制基因结构图_GSDS 基因结构显示系统
  15. Mach-O文件, 架构包framework的合并和拆分
  16. 华为路由器 环回互通实验(顺时针)
  17. 视频怎么水平翻转画面并做锐化处理?
  18. 如何让谷歌收录自己的网站?谷歌多久收录我的网站?
  19. 二年级机器人伙伴看图写话_机器人的看图写话范文-看图写话机器人老师?
  20. 大数据综合案例大作业

热门文章

  1. unity中打开网页
  2. amd nvidia 颜色_现在是购买新的NVIDIA或AMD显卡的好时机吗?
  3. Pycharm激活码 最新的
  4. php定时任务 workerman+tp6开发
  5. 都开始谈内容生态后,信息流如何做出差异化?
  6. 位移操作符 <<左移 与 >>右移 的基本逻辑
  7. 考研阅读唐迟视频总结
  8. markdown在线编辑工具,在线渲染,转换html
  9. Linux 中启动jar包命令
  10. 软交换FreeSWITCH系统概要和源代码初步分析