guopengfa
发布于 2021-04-08 / 556 阅读 / 0 评论 / 0 点赞

MacBook中的‘systemctl’自定义服务定时任务

This MacBook中的定时任务

借鉴https://www.jianshu.com/p/4addd9b455f2

launchctl

  • 类似于centos中的systemct

  • 为服务控制命令

  • launchctl对应的*.plist服务文件

  • 目录文件

    * /Libray/LaunchDaemons -->只要系统启动了,即使不登录也会被执行
    * /Library/LaunchAgents -->当用户登录后才会被执行
    * ~/Library/LaunchAgents 由用户自己定义的任务项
    * /Library/LaunchAgents 由管理员为用户定义的任务项
    * /Library/LaunchDaemons 由管理员定义的守护进程任务项
    * /System/Library/LaunchAgents 由Mac OS X为用户定义的任务项
    * /System/Library/LaunchDaemons 由Mac OS X定义的守护进程任务项
    
    • 创建好plist文件需要先加载: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
      

plist文件

  • 如下demo

    <?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>
    
    • 此处定时任务为22:00每日执行/User/demo/run.sh命令

评论