mac定时任务launchctl

2023-12-10  本文已影响0人  never615

文档: launchctl Man Page - macOS - SS64.com

主要命令:

加载(启用): launchctl load xxx.plist
取消加载(取消启用): launchctl unload xxx.plist
查看状态: launchctl list (Status 不是0的话表示有问题)

Plist 文件配置

目录位置

Mac OS X 中支持放 plist 的目录如下:
• /Library/LaunchDaemons: 系统启动后就会执行
• /Library/LaunchAgents: 当用户登录系统后才会执行
• ~/Library/LaunchAgents: 用户自定义的 plist
• /System/Library/LaunchAgents: 由 Mac OS X 为用户定义的任务
• /System/Library/LaunchDaemons: 由 Mac OS X 定义的守护进程任务

一般放在 ~/Library/LaunchAgents即可. (同目录还有一些其他程序的配置,可以参考使用)

image.png

指令

在 Plist 中,支持两种定时任务的设置:

设置周期运行: StartInterval <integer>

单位秒.
使用:

<key>StartInterval</key>
<integer>60</integer>

设置定时运行: StartCalendarInterval <dictionary of integers or array of dictionary of integers>

使用:

        <key>StartCalendarInterval</key> 
        <dict> 
            <!--在第几分钟会被执行 -->
            <key>Minute</key>
            <integer>00</integer>
            <!-- 在第几个小时会被执行-->
            <key>Hour</key> 
            <integer>22</integer> 
        </dict>

参考:

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.

WatchPaths - 监控路径,当路径文件有变化是运行程序,也是数组

        <key>WatchPaths</key>
        <array>
                <string>/Library/Preferences/SystemConfiguration</string>
        </array>

创建配置

  1. 文件必须以plist结尾.
  2. 配置文件中引用的命令脚本的目录或者输出日志的目录均不可是用户私有目录:Apple 已将 ~/documents desktop 和 downloads 指定为私有目录。launchd 无法从它们执行脚本。 使用私有目录launchctl list查看状态会显示126.

创建com.enever615.ejectdisk.plist,作用是每天早上自动推出timemachine备份磁盘,这样我就可以直接拔掉扩展坞带走电脑了,示例文件如下:

<?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>
        <key>Label</key>
        <!--Plist 名称,必须唯一--> 
        <string>com.never615.ejectdisk</string>
        <key>ProgramArguments</key>
        <!-- 指定要运行的程序的名称,可以是一个程序或者是一段脚本 数组类型 -->   
        <array>
          <string>sh</string>
          <string>-c</string>
          <string>shortcuts run 推出磁盘</string>
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Minute</key>
            <integer>00</integer>
            <key>Hour</key>
            <integer>06</integer>
        </dict>
        <key>StandardOutPath</key>
        <string>/Users/never615/scripts/launchctl/logs/ejectdisk.log</string>
        <key>StandardErrorPath</key>
        <string>/Users/never615/scripts/launchctl/logs/ejectdisk.err</string>
    </dict>
</plist>

shortcuts 是调用系统的快捷指令.


截屏2023-12-11 16.29.37.png

GUI

brew install --cask launchcontrol 可以安装launchctl的gui工具,但是他是付费软件,100多点,如果你配置遇到问题的话试用版也可以帮你分析检查出部分问题,或许对你有用.

image.png
上一篇下一篇

猜你喜欢

热点阅读