Сценарий управления LXC, запущенный через crontab, не работает правильно, но при использовании от cmd строки в порядке

У меня есть сценарий, который использует именованные каналы для управления контейнерами. Мониторы сценариев именованный канал для команд и выполняет то, что питается в его вход. Сценарий должен работать как пользователь, который владеет контейнерами. Любой другой пользователь может отправить команды в сценарий.

Сценарий работает при выполнении на командной строке. Но я хочу, чтобы это было демоном и запустило себя на начальной загрузке системы. Испытанная установка его как услуга с пользователем аппарата - не работа. Попробованный это как задание крона - @restart /home/conts/cont-control.sh - это также не работает. Именованный канал создается, shutdown работы части хорошо, но другие - не делают.

Кто-то может предложить, где может быть проблема?

Вот фактический сценарий:

#!/usr/bin/env bash

input=/tmp/container-control
mkfifo $input
chmod o+w $input

trap "rm $input" EXIT

stopAllContainers () {
    for i in $(lxc-ls); do
        lxc-stop -n $i
    done
}

startContainerGroup () {
    lxc-autostart -g $1
}

startContainer () {
    lxc-start -n $1
}

stopContainer () {
    lxc-stop -n $1
}

while true; do if read -r -a cmd <$input; then
    case ${cmd[0]} in
        "shutdown")
            stopAllContainers
            echo "Shutting down containers ... done" > $input
        ;;
        "start-group")
            startContainerGroup ${cmd[1]}
            echo "Starting group ${cmd[1]} ... done" > $input
        ;;
        "start")
            startContainer ${cmd[1]}
            echo "Starting ${cmd[1]} container ... done" > $input
        ;;
        "stop")
            stopContainer ${cmd[1]}
            echo "Stopping ${cmd[1]} container ... done" > $input
        ;;
        *)
            echo "Unsupported command: ${cmd[0]} with argument: ${cmd[1]} ... fail" > $input
        ;;
    esac
fi
done

Править: После редактирования crontab так, чтобы это произвело ошибки в файл, кажется, что проблемой является связанный lxc. Вот вывод при попытке запустить контейнер, названный mysql-dev:

lxc-start: mysql-dev: lxccontainer.c: wait_on_daemonized_start: 833 No such file or directory - Failed to receive the container state
lxc-start: mysql-dev: tools/lxc_start.c: main: 330 The container failed to start
lxc-start: mysql-dev: tools/lxc_start.c: main: 333 To get more details, run the container in foreground mode
lxc-start: mysql-dev: tools/lxc_start.c: main: 336 Additional information can be obtained by setting the --logfile and --logpriority options

Снова, команда завершения работы работает хорошо - другие не делают. Когда выполнено от cmd строки, сценарий обычно ведет себя.

2
задан 30 April 2019 в 14:33

2 ответа

После опробования предложений, я пришел к выводу, что это, вероятно, какая-то ошибка или особенность эзотерической конфигурации в моей системе (Linux main 4.18.0-17-generic #18~18.04.1-Ubuntu). В любом случае, выследить его, наверное, не стоит.

В случае, если кто-то испытывает нечто подобное, возможно, он должен согласиться на обходной путь. Это то, что я в конечном итоге сделал:

  • переработал скрипт так, чтобы его можно было использовать без именованных каналов
  • , просто вызвав его с помощью команды ssh на localhost, например: ssh conts@ubuntu 'cont-control.sh shutdown'.

С сертификатом в авторизованных ключах у него 0 служебных данных.

Спасибо всем.

0
ответ дан 30 April 2019 в 14:33

Я подозреваю, что вы хотите запустить демонизированные контейнеры.

-d, --daemon
Run the container as a daemon. As the container has no more tty, if an error 
occurs nothing will be displayed, the log file can be used to check the error. 
(This is the default mode)

Итак, в вашем примере что-то вроде этого:

startContainer () {
    lxc-start -d -n $1
}

Сообщения об ошибках, я подозреваю, появляются, потому что, когда вы запускаете это как скрипт остановки / запуска, TTY для lxc недоступен подключиться к вашим контейнерам, и поэтому они не запускаются.

Ссылки

0
ответ дан 30 April 2019 в 14:33

Другие вопросы по тегам:

Похожие вопросы: