Как запустить виртуальную машину KVM-QEMU после подключения к порту VNC через системные сокеты? ⇐ Linux
Как запустить виртуальную машину KVM-QEMU после подключения к порту VNC через системные сокеты?
Я пытаюсь держать свои виртуальные машины в незапущенном состоянии до тех пор, пока они не потребуются. И затем держите их включенными, пока пользователи или я не отключим их. Я пытаюсь автоматически запустить соединение с VNC-сервером через порт 5900 (пример № 1) или перенаправить его на другой порт, который позже перенаправит его на порт 5900 (пример № 2). Прямо сейчас у меня есть туннели Cloudfare, которые отображают VNC прямо в браузере. Я попробовал два разных подхода:
Первая идея kvm1.socket (порт 5900) kvm1.service (запуск виртуальной машины с VNC через порт 5900)
и
Вторая идея: kvm1-proxy.socket (порт 5888) kvm1-proxy.service (перенос на порт 5900) kvm1.service (запуск виртуальной машины с VNC через порт 5900)
Конфигурационные файлы для первой идеи kvm1.socket
[Единица измерения] Описание=Разъем виртуальной машины KVM1 [Разъем] ListenStream=5900 NoDelay=истина DeferAcceptSec=15 [Установить] WantedBy=sockets.target kvm1.service
[Единица измерения] Описание = квм1 После=network.target [Услуга] Тип=уведомить ExecStart = виртуальный запуск ubuntu23.10-kvm1 #ExecStartPost=/usr/local/bin/waitport 127.0.0.1 5900 #Это что-то вроде сценария, который выполняет "переход в сон каждые 0,1 секунды, пока порт не откроется" #ExecStop=выключение Virsh ubuntu23.10-kvm1 [Установить] WantedBy=multi-user.target Результаты: $ sudo systemctl включить kvm1.socket $ sudo systemctl запустить kvm1.socket
сокет прослушивает порт 5900 Как только я подключусь к нему:
26 февраля 00:16:46 имя хоста systemd[1]: прослушивание kvm1.socket — сокета виртуальной машины KVM1. 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.socket: Ошибка с результатом «начало службы-лимит-хит». 26 февраля 00:17:52 имя хоста systemd[1]: Запуск kvm1.service - kvm1... 26 февраля 00:17:53 имя хоста virsh [2120685]: ошибка: не удалось запустить домен «ubuntu23.10-kvm1» 26 февраля 00:17:53 имя хоста virsh [2120685]: ошибка: внутренняя ошибка: QEMU неожиданно закрыл монитор ( вм='ubuntu23.> 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.service: основной процесс завершен, код = выход, статус = 1/FAILURE 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.service: Ошибка с результатом «код выхода». 26 февраля 00:17:53 имя хоста systemd[1]: не удалось запустить kvm1.service — kvm1. 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.service: Запрос на запуск повторяется слишком быстро. 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.service: Ошибка с результатом «код выхода». 26 февраля 00:17:53 имя хоста systemd[1]: не удалось запустить kvm1.service — kvm1. Можно ли в любом случае запустить KVM с сокетом, используя тот же порт?
Проверка второго варианта подключитесь к 5888 (через Cloudflare в браузере) и проксируйте его на порт 5900.
kvm1-proxy.socket
[Единица измерения] Описание=Разъем виртуальной машины KVM1 [Разъем] ListenStream=5888 NoDelay=истина DeferAcceptSec=15 [Установить] WantedBy=sockets.target kvm1-proxy.service
[Единица измерения] Требуется=kvm1.service После=kvm1.service [Услуга] ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:5900 kvm1.service
[Единица измерения] Описание=квм1 [Услуга] ExecStart = виртуальный запуск ubuntu23.10-kvm1 ExecStartPost=/bin/sleep 1 ExecStop=выключение Virsh ubuntu23.10-kvm1 [Установить] WantedBy=multi-user.target Результаты: $ sudo systemctl включить kvm1-proxy.socket $ sudo systemctl start kvm1-proxy.socket
$ sudo systemctl status kvm1-proxy.socket
Активен: активен (прослушивает) с понедельника 26 февраля 2024 г., 00:28:13 CST; 1мин 48с назад Триггеры: ● kvm1-proxy.service. Слушайте: [::]:5888 (поток) 26 февраля 00:28:13 имя хоста systemd [1]: прослушивание kvm1-proxy.socket — сокета виртуальной машины KVM1. KVM1.service запускается, и виртуальная машина работает.
Теперь, как я могу отключить kvm1-proxy.socket при выключении виртуальной машины? По сути, таким образом он остается активным навсегда.
kvm1-proxy.service Загружено: загружено (/etc/systemd/system/kvm1-proxy.service; static) Активно: активно (работает) с понедельника 26 февраля 2024 г. 00:31:39 CST; 4 минуты 12 секунд назад TriggeredBy: ● kvm1-proxy.socket Основной PID: 2138322 (systemd-socket-) Задачи: 2 (ограничение: 154233) Память: 1,0 МБ ЦП: 6 мс CGroup: /system.slice/kvm1-proxy.service └─2138322 /lib/systemd/systemd-socket-proxyd 127.0.0.1:5900 26 февраля 00:31:39 имя хоста systemd[1]: запущен kvm1-proxy.service. 26 февраля 00:31:39 имя хоста systemd-socket-proxyd [2138322]: не удалось подключиться к удаленному хосту: соединение отклонено Идея состоит в том, что он остается включенным до тех пор, пока пользователь не выключит его (при отключении питания виртуальной машины или выключении virsh ubuntu23.10-kvm1). systemd status видит его в неактивном состоянии (работает или завершает работу). Поэтому kvm1-proxy.service остается «активным» и никогда не запустит машину для следующего цикла. Как я могу узнать systemd, когда виртуальная машина выключена и proxy.service отключается?
kvm1.service — kvm1 Загружено: загружено (/etc/systemd/system/kvm1.service; отключено; предустановлено: включено) Активен: неактивен (мертв) с понедельника 26 февраля 2024 г., 00:31:40 CST; 4 минуты 37 секунд назад Продолжительность: 664 мс Процесс: 2138228 ExecStart=virsh start ubuntu23.10-kvm1 (код=выход, статус=0/УСПЕХ) Процесс: 2138229 ExecStartPost=/bin/sleep 1 (код=выход, статус=0/УСПЕХ) Процесс: 2138370 ExecStop=virsh завершение работы ubuntu23.10-kvm1 (код=выход, статус=0/УСПЕХ) Основной PID: 2138228 (код=выход, статус = 0/УСПЕХ ЦП: 46 мс
Я пытаюсь держать свои виртуальные машины в незапущенном состоянии до тех пор, пока они не потребуются. И затем держите их включенными, пока пользователи или я не отключим их. Я пытаюсь автоматически запустить соединение с VNC-сервером через порт 5900 (пример № 1) или перенаправить его на другой порт, который позже перенаправит его на порт 5900 (пример № 2). Прямо сейчас у меня есть туннели Cloudfare, которые отображают VNC прямо в браузере. Я попробовал два разных подхода:
Первая идея kvm1.socket (порт 5900) kvm1.service (запуск виртуальной машины с VNC через порт 5900)
и
Вторая идея: kvm1-proxy.socket (порт 5888) kvm1-proxy.service (перенос на порт 5900) kvm1.service (запуск виртуальной машины с VNC через порт 5900)
Конфигурационные файлы для первой идеи kvm1.socket
[Единица измерения] Описание=Разъем виртуальной машины KVM1 [Разъем] ListenStream=5900 NoDelay=истина DeferAcceptSec=15 [Установить] WantedBy=sockets.target kvm1.service
[Единица измерения] Описание = квм1 После=network.target [Услуга] Тип=уведомить ExecStart = виртуальный запуск ubuntu23.10-kvm1 #ExecStartPost=/usr/local/bin/waitport 127.0.0.1 5900 #Это что-то вроде сценария, который выполняет "переход в сон каждые 0,1 секунды, пока порт не откроется" #ExecStop=выключение Virsh ubuntu23.10-kvm1 [Установить] WantedBy=multi-user.target Результаты: $ sudo systemctl включить kvm1.socket $ sudo systemctl запустить kvm1.socket
сокет прослушивает порт 5900 Как только я подключусь к нему:
26 февраля 00:16:46 имя хоста systemd[1]: прослушивание kvm1.socket — сокета виртуальной машины KVM1. 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.socket: Ошибка с результатом «начало службы-лимит-хит». 26 февраля 00:17:52 имя хоста systemd[1]: Запуск kvm1.service - kvm1... 26 февраля 00:17:53 имя хоста virsh [2120685]: ошибка: не удалось запустить домен «ubuntu23.10-kvm1» 26 февраля 00:17:53 имя хоста virsh [2120685]: ошибка: внутренняя ошибка: QEMU неожиданно закрыл монитор ( вм='ubuntu23.> 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.service: основной процесс завершен, код = выход, статус = 1/FAILURE 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.service: Ошибка с результатом «код выхода». 26 февраля 00:17:53 имя хоста systemd[1]: не удалось запустить kvm1.service — kvm1. 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.service: Запрос на запуск повторяется слишком быстро. 26 февраля 00:17:53 имя хоста systemd[1]: kvm1.service: Ошибка с результатом «код выхода». 26 февраля 00:17:53 имя хоста systemd[1]: не удалось запустить kvm1.service — kvm1. Можно ли в любом случае запустить KVM с сокетом, используя тот же порт?
Проверка второго варианта подключитесь к 5888 (через Cloudflare в браузере) и проксируйте его на порт 5900.
kvm1-proxy.socket
[Единица измерения] Описание=Разъем виртуальной машины KVM1 [Разъем] ListenStream=5888 NoDelay=истина DeferAcceptSec=15 [Установить] WantedBy=sockets.target kvm1-proxy.service
[Единица измерения] Требуется=kvm1.service После=kvm1.service [Услуга] ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:5900 kvm1.service
[Единица измерения] Описание=квм1 [Услуга] ExecStart = виртуальный запуск ubuntu23.10-kvm1 ExecStartPost=/bin/sleep 1 ExecStop=выключение Virsh ubuntu23.10-kvm1 [Установить] WantedBy=multi-user.target Результаты: $ sudo systemctl включить kvm1-proxy.socket $ sudo systemctl start kvm1-proxy.socket
$ sudo systemctl status kvm1-proxy.socket
Активен: активен (прослушивает) с понедельника 26 февраля 2024 г., 00:28:13 CST; 1мин 48с назад Триггеры: ● kvm1-proxy.service. Слушайте: [::]:5888 (поток) 26 февраля 00:28:13 имя хоста systemd [1]: прослушивание kvm1-proxy.socket — сокета виртуальной машины KVM1. KVM1.service запускается, и виртуальная машина работает.
Теперь, как я могу отключить kvm1-proxy.socket при выключении виртуальной машины? По сути, таким образом он остается активным навсегда.
kvm1-proxy.service Загружено: загружено (/etc/systemd/system/kvm1-proxy.service; static) Активно: активно (работает) с понедельника 26 февраля 2024 г. 00:31:39 CST; 4 минуты 12 секунд назад TriggeredBy: ● kvm1-proxy.socket Основной PID: 2138322 (systemd-socket-) Задачи: 2 (ограничение: 154233) Память: 1,0 МБ ЦП: 6 мс CGroup: /system.slice/kvm1-proxy.service └─2138322 /lib/systemd/systemd-socket-proxyd 127.0.0.1:5900 26 февраля 00:31:39 имя хоста systemd[1]: запущен kvm1-proxy.service. 26 февраля 00:31:39 имя хоста systemd-socket-proxyd [2138322]: не удалось подключиться к удаленному хосту: соединение отклонено Идея состоит в том, что он остается включенным до тех пор, пока пользователь не выключит его (при отключении питания виртуальной машины или выключении virsh ubuntu23.10-kvm1). systemd status видит его в неактивном состоянии (работает или завершает работу). Поэтому kvm1-proxy.service остается «активным» и никогда не запустит машину для следующего цикла. Как я могу узнать systemd, когда виртуальная машина выключена и proxy.service отключается?
kvm1.service — kvm1 Загружено: загружено (/etc/systemd/system/kvm1.service; отключено; предустановлено: включено) Активен: неактивен (мертв) с понедельника 26 февраля 2024 г., 00:31:40 CST; 4 минуты 37 секунд назад Продолжительность: 664 мс Процесс: 2138228 ExecStart=virsh start ubuntu23.10-kvm1 (код=выход, статус=0/УСПЕХ) Процесс: 2138229 ExecStartPost=/bin/sleep 1 (код=выход, статус=0/УСПЕХ) Процесс: 2138370 ExecStop=virsh завершение работы ubuntu23.10-kvm1 (код=выход, статус=0/УСПЕХ) Основной PID: 2138228 (код=выход, статус = 0/УСПЕХ ЦП: 46 мс
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Qemu установлен правильно и работает, но нет /dev/kvm на Arm64 Ubuntu [закрыто]
Anonymous » » в форуме Linux - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-