Linux при выполнении команды docker -составить - PullRequest
0 голосов
/ 18 февраля 2020

Цель: я пытаюсь запланировать 'docker -композицию' в запланированное время

Операционная система: Linux Ubuntu 18.04

Я пытался использовать 'at 'команда в linux, но я пытаюсь установить переменные и не могу заставить его работать.

Попытки ниже:

sudo echo "KEY='VALUE' DIRECTION='D' sh run.sh" | at now + 2 minute
# Above does not run the docker-compose

sudo echo "KEY='VALUE' DIRECTION='D' sh run.sh" | at now + 2 minute
# Above runs docker-compose command immediately but not in 2 minutes
# run.sh

# SET LOGFILE LOCATION
LOG_FILE="/var/log/at/test.log"

FLIGHT_FILE="flight.yaml" docker-compose up --abort-on-container-exit >> "${LOG_FILE}"

Если есть лучший способ чем с помощью команды «at», я тоже открыт для этого.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

в вашем примере (обе попытки одинаковы) только echo выполняется sudo, at выполняется как ваш пользователь.

опции:

запустить скрипт в очереди root at:

sudo sh -c "echo \"KEY='VALUE' DIRECTION='D' sh /home/user/run.sh \" | at now + 1 min"

make at run sudo - работает только если у вас есть sudo настройка, чтобы не запрашивать пароль:

echo "sudo sh -c \"KEY='VALUE' DIRECTION='D' /home/user/run.sh\"" | at now + 2 min

настроить docker, поэтому вам не нужно sudo

0 голосов
/ 18 февраля 2020

Существует 2 возможных подхода -

Один файл -

Создать файл / etc / systemd / system / d c -test. service

[Unit]
Description=My Docker Compose runner

[Service]
User=%I
Restart=always
RestartSec=600s
ExecStart=/bin/bash /home/user/run.sh

Выше сценарий будет запускаться каждые 600 секунд.

Multi File (с таймерами обслуживания)

Вам необходимо создайте два файла, один для службы, другой для таймера с тем же именем.

пример:

/ etc / systemd / system / d c -test.service

[Unit]
Description=My Docker Compose runner

[Service]
Type=oneshot
ExecStart=/bin/bash /home/user/run.sh

/ etc / systemd / system / d c -test.timer

[Unit]
Description=Docker Compose Timer

[Timer]
OnUnitActiveSec=600s
OnBootSec=600s

[Install]
WantedBy=timers.target

В обоих подходах вам нужно будет запустить systemctl daemon-reload После того, как вы закончили создавать файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...