首页 > 其他分享 >launchctl :MAC 下的定时任务

launchctl :MAC 下的定时任务

时间:2023-06-23 11:25:30浏览次数:41  
标签:run demo 任务 MAC launchctl 定时 com plist

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

标签:run,demo,任务,MAC,launchctl,定时,com,plist
From: https://www.cnblogs.com/cangqinglang/p/17498858.html

相关文章

  • mac arm64交叉编译 x84_64
    toolchain_x86_64.cmakeset(CMAKE_SYSTEM_NAMEDarwin)#设置操作系统为Monterey(macOS)set(CMAKE_SYSTEM_PROCESSORx86_64)#设置目标处理器架构为x86_64set(CMAKE_OSX_ARCHITECTURESx86_64)set(CMAKE_CROSSCOMPILINGtrue)#设置交叉编译工具链路径set(CMAKE_C_CO......
  • Qt编写跨平台的推流工具(支持win/linux/mac/嵌入式linux/安卓等)
    一、前言跨平台的推流工具当属OBS最牛逼,功能也是最强大的,唯一的遗憾就是多路推流需要用到插件,而且CPU占用比较高,默认OBS的规则是将对应画布中的视频画面和设定的音频一起重新编码再推流,意味着肯定占用不少CPU资源,而很多时候尤其是视频监控行业,往往源头的摄像头的视频流就是标准的......
  • MacBook 搭建python开发环境
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]专题目录MacBook搭建python开发环境一、需要安装的软件安装Python安装pip安装Virtualenv安装VSCodeVSCode安装Python扩展插件安装PyCharm二、IDE搭配VSCode+Python+pip+Virtuale......
  • linux中用crontab定时任务启动jar无效的问题
    原文链接:https://blog.csdn.net/for_the_time_begin/article/details/113940508问题:使用linux系统中的定时任务执行jar包,但是经过测试发现一只不能正常执行,发现定时任务crontab是正常运行的,因为再写一个测试用的定时任务指定时间在指定的目录位置下生成一个文件,或者向文件中追......
  • MacBook 搭建python开发环境
    转载请注明来源:http://www.eword.name/Author:ewordEmail:[email protected]搭建python开发环境一、需要安装的软件安装Python安装pip安装Virtualenv安装VSCodeVSCode安装Python扩展插件安装PyCharm二、IDE搭配VSCode+Python+pip+Virtualenv或【推荐】......
  • celery 执行异步任务,延迟任务,定时任务
    celery执行异步任务,延迟任务,定时任务1异步任务 任务.delay(参数)2延迟任务 任务.app_async(args=[].eta=时间对象)#如果没有修改时区,需要使用utc时间3定时任务 需要启动beat和worker-beat定时提交任务进程---》配置在app.comf.beat_schedule的任务-worker......
  • Python定时任务框架apscheduler
    Python定时任务框架apscheduler目录Python定时任务框架apscheduler安装基本概念介绍调度器的工作流程实例1-间隔性任务----每3秒打印出了当前时间。实例2-cron任务配置调度器方法一:方法二:启动调度器方法一:使用默认的作业存储器:方法二:使用数据库作为存储器:调度器事件监听说......
  • APScheduler+MySQL实现定时任务及其持久化存储
    APScheduler+MySQL实现定时任务及其持久化存储转自:APScheduler+MySQL实现定时任务及其持久化存储-简书(jianshu.com)最近,想要实现一个功能,就是添加定时任务的同时记录其任务信息到数据库中,可以通过接口查看设定了哪些定时任务,经过调研,发现大家公认的Python最好用的定时任务框......
  • 转:Quartz定时调度CronTrigger时间配置格式说明与实例
    转:https://www.iteye.com/blogs/tag/quartz Quartz定时调度CronTrigger时间配置格式说明与实例quartz工作SUN 1、CronTrigger时间格式配置说明CronTrigger配置格式:格式:[秒][分][小时][日][月][周][年]序号说明是否必填允许填写的值......
  • Ubuntu 定时执行
    编辑自己的文件crontab–ecrontab[-uuser]-e-l-r其中:-u用户名。如果使用自己的名字登录,就不用使用-u选项。-e编辑crontab文件。不带-u选项可以编辑自己的crontab文件。-l列出crontab文件中的内容。不带-u选项可以列出自己的crontab文件的内容。-......