美文网首页
mac 自动定时执行任务

mac 自动定时执行任务

作者: 阳明先生x | 来源:发表于2021-12-25 17:11 被阅读0次

1、launchctl

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

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

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

配置文件(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定义的守护进程任务项

plist部分参数说明:

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

任务相关命令

# 加载任务, -w选项会将plist文件中无效的key覆盖掉,建议加上
$ launchctl load -w com.test.plist

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

# 查看任务列表, 使用 grep '任务部分名字' 过滤
$ launchctl list | grep 'test.demo'

# 开始任务
$ launchctl start  com.test.plist

# 结束任务
$ launchctl stop   com.test.plist

注意:
如果任务被修改了,那么必须先unload,然后重新load
start可以测试任务,这个是立即执行,不管时间到了没有
执行start和unload前,任务必须先load过,否则报错
stop可以停止任务

实战

创建一个定时任务:

任务目标:没一分钟执行一次shell脚本

创建脚本文件,以及一些接收文件

1、创建一个简单的Shell脚本。

脚本任务:输出时间到time.txt文件中

vim ~/Desktop/testShell.sh

并在testShell.sh输入

time=$(date "+%Y-%m-%d %H:%M:%S")
echo "$time" >> ~/Desktop/time.txt

如图:

image

2、创建time.txt文件

touch ~/Desktop/time.txt

3、创建一个标准输出文件

touch ~/Desktop/stdout

2、创建任务描述文件

vim ~/Library/LaunchAgents/com.test.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>
    <!-- Label唯一的标识 -->
    <key>Label</key>
    <string>com.test</string>
    <!-- 指定要运行的脚本 -->
    <key>ProgramArguments</key>
    <array>
        <string>/Users/jamalping/Desktop/testShell.sh</string>
    </array>
    <!-- 指定运行的时间 -->
    <key>StartCalendarInterval</key>
    <dict>
        <key>Minute</key>
        <integer>1</integer>
        <key>Hour</key>
        <integer>0</integer>
    </dict>
    <!-- 时间间隔 -->
    <key>StartInterval</key>
    <integer>3</integer>
    <key>StandardOutPath</key>
    <!-- 标准输出文件 -->
    <string>/Users/jamalping/Desktop/stdout</string>
    <!-- 标准错误输出文件,错误日志 -->
    <key>StandardErrorPath</key>
    <string>/Users/jamalping/Desktop/error.txt</string>
</dict>
</plist>

  • 加载任务
launchctl load -w com.test.plist 

  • 开始任务
launchctl start -w com.test.plist 

接下来就可以在time.txt文件中看到输出时间了。
如图:

image

作者:jamalping
链接:https://www.jianshu.com/p/44313b350b70
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章

  • mac 自动定时执行任务

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

  • mac 自动定时执行任务

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

  • 定时器,BOM常用对象: history, location

    2016-0913am day05 1. 定时器 什么是定时器: 让程序按照指定的时间间隔自动执行任务何时需要定时...

  • Java中的任务调度

    任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。 Java中几种任务调度方式 Timer S...

  • Timer篇与 Quartz篇

    什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动完成执行任务 在Java中的定时调度工具...

  • 聊Java中的任务调度的实现方法及比较

    前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。本文由浅入深介绍四种任务调度的 Jav...

  • Java中的任务调度

    前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。本文介绍前两种任务调度的 Java 实...

  • 如何使用launchRocket自动定时执行任务

    ​我们经常有这样的需求,发现磁盘空间快满了要去手动清一下,clone完自己star的项目后,隔一段时间会去手动pu...

  • 31-Timer的缺陷分析

    Timer的缺陷分析 Timer计时器可以定时(指定时间执行任务)、延迟(延迟5秒执行任务)、周期性地执行任务(每...

  • 【Linux命令/Mac适用】crontab(定时执行任务)

    example: 每天8点49分执行“ls -l”命令并将结果保存到桌面的test000.txt文件中 5栏分别对...

网友评论

      本文标题:mac 自动定时执行任务

      本文链接:https://www.haomeiwen.com/subject/sfgdqrtx.html