如何使用 launchd 在 MacOS 上安排“docker-compose”的运行

如何使用 launchd 在 MacOS 上安排“docker-compose”的运行

我正在用构建一些软件docker-compose,我想按计划运行它。

因此,我需要在 MacOS (High Sierra,10.13.3) 上安排运行docker-compose up,使用启动。这是我正在使用的 LaunchAgent 配置。

<?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>
    <string>local.edgarlydata</string>

    <!-- This script, which calls "docker-compose up" also fails :/

    <key>Program</key>
    <string>/Users/me/my/project/my-script.sh</string> -->

    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/docker-compose</string>
      <string>up</string>
    </array>

    <key>StartCalendarInterval</key> 
    <array>
      <dict> 
        <key>Hour</key> 
        <integer>19</integer> 
        <key>Minute</key> 
        <integer>18</integer> 
        <key>Weekday</key>
        <integer>3</integer>
      </dict>
    </array>
  </dict>
</plist>

当进程在预定时间启动时,系统日志会给我这个错误消息。没有理由为什么故障正在发生。

Aug 15 19:18:00 MacBook-Pro com.apple.xpc.launchd[1] (local.edgarlydata[5379]): Service exited with abnormal code: 1

已编辑添加尝试的内容/Users/me/my/project/my-script.sh。没有骰子。

#!/bin/sh

sudo -u myuser /usr/local/bin/docker-compose up

我看到过类似的问题在这里。但那是因为docker-machinedocker-compose需要从项目目录开始。不用说,它并不能解决问题。

有任何想法吗?

答案1

理想情况下, /Users/me/my/project/my-script.sh

应该只是:

docker compose up

并且您的大部分 Docker 配置应该放在项目docker-compose.yml文件中。

答案2

StandardErrorPath因此,我首先通过指定和来使它工作StandardOutPath。这些日志让我看到我的docker-compose working_dir设置。它之前是 docker 的 PWD,我将其硬编码为/usr/应用程序

app:
  image: my/app:latest
  working_dir: /usr/app
  volumes:
    - .:/usr/app
  entrypoint: run app

我的我的作业.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>
    <key>Label</key>
    <string>local.myjob</string>

    <key>StandardErrorPath</key>
    <string>/Users/me/Projects/myproject/stderr.log</string>

    <key>StandardOutPath</key>
    <string>/Users/me/Projects/myproject/stdout.log</string>

    <key>WorkingDirectory</key>
    <string>/Users/me/Projects/myproject</string>

    <key>EnvironmentVariables</key>
    <dict>
      <key>PATH</key>
      <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
    </dict>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/bin/docker-compose</string>
      <string>up</string>
      <string>-d</string>
    </array>

    <key>StartCalendarInterval</key> 
    <array>
       <dict> 
        <key>Hour</key> 
        <integer>9</integer> 
        <key>Minute</key> 
        <integer>30</integer> 
        <key>Weekday</key>
        <integer>1</integer>
      </dict>
    </array>
  </dict>
</plist>

相关内容