Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    Скрипт Hookscript с 'post-stop', когда ВМ выключалась из самой ВМ.

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    Скрипт Hookscript с 'post-stop', когда ВМ выключалась из самой ВМ., Proxmox Виртуальная Среда
     
    drletai
    Guest
    #1
    0
    13.07.2020 02:14:00
    Привет, интересно, кто-нибудь знает ответ... Возможно ли запустить хукскрипт после остановки ВМ, когда она была выключена сама? Если выключать через Proxmox GUI, нажимая кнопку "Стоп", проблем нет, событие post-stop срабатывает, и скрипт запускается. Но если выключать через кнопку "Выключить" в Windows ВМ, qmeventd сообщает, что ВМ все еще работает, и post-stop не срабатывает. У кого-нибудь есть идеи, или, возможно, патч? Спасибо.
     
     
     
    Jayboyb
    Guest
    #2
    0
    19.08.2020 15:41:00
    Интересно. Записи syslog отличаются при выключении ВМ изнутри ОС и из графического интерфейса Proxmox.

    Catalina выключается изнутри ОС: Aug 19 14:18:38 jasper1 qmeventd[3920]: Starting cleanup for 170
    Aug 19 14:18:38 jasper1 qmeventd[3920]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Aug 19 14:18:38 jasper1 qmeventd[3920]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft Shutting Down Proxmox bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Aug 19 14:18:38 jasper1 qmeventd[3920]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Aug 19 14:18:38 jasper1 qmeventd[3920]: Finished cleanup for 170

    Catalina выключается из Proxmox GUI: Aug 19 14:32:10 jasper1 qmeventd[4023]: Starting cleanup for 170
    Aug 19 14:32:10 jasper1 qmeventd[4023]: trying to acquire lock…
    Aug 19 14:32:10 jasper1 qmeventd[4023]: OK
    Aug 19 14:32:10 jasper1 qmeventd[4023]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Aug 19 14:32:10 jasper1 qmeventd[4023]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft Shutting Down Proxmox bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Aug 19 14:32:10 jasper1 qmeventd[4023]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Windows 10 выключается из Proxmox GUI: Aug 19 14:14:36 jasper1 qmeventd[3972]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Aug 19 14:14:36 jasper1 qmeventd[3972]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft Shutting Down Proxmox bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Aug 19 14:14:36 jasper1 qmeventd[3972]: bin boot dev etc home lib lib32 lib64 libx32 media mnt opt pool1 proc root rpool run sbin srv sys tmp usr var win-soft
    Aug 19 14:14:36 jasper1 qmeventd[3972]: Finished cleanup for 122 Windows 10 выключается изнутри ОС: Aug 19 14:35:35 jasper1 qmeventd[3902]: Starting cleanup for 122

    vm still running. Так что, что-то определенно отличается в трех случаях, которые запускают хук post-stop, и в конечном случае, когда это не происходит. Я также запустил: while kill -s 0 $pid ; do : ; sleep 0.25 ; done && date, пока процесс kvm не закончился. Интересно, что это происходит на 3-4 секунды позже отправки сообщения 'Finished Cleaning up' в syslog во всех случаях.
     
     
     
    zaixi
    Guest
    #3
    0
    26.07.2021 09:51:00
    Я тоже недавно столкнулся с тем, что ВМ продолжает работать. Оказалось, что это из-за передачи USB в конфигурационном файле. Я удалил usb0 и usb1, чтобы инициировать событие "post-stop" как положено. Код:
    agent: 1
    balloon: 0
    bios: ovmf
    bootdisk: scsi0
    cores: 2
    cpu: host
    efidisk0: local-lvm:vm-103-disk-1,size=4M
    hookscript: local:snippets/hackintosh.sh
    hostpci0: 07:00,pcie=1,romfile=patchedGTX1050.rom,x-vga=1
    machine: q35
    memory: 16384
    name: gwin10
    net0: virtio=5A:75:69:72:05:19,bridge=vmbr0,firewall=1
    numa: 1
    ostype: win10
    scsi0: local-lvm:vm-103-disk-0,size=100G
    scsihw: virtio-scsi-pci
    smbios1: uuid=9dfa4298-89b6-4805-9510-54a04e3d8d6c
    sockets: 2
    usb0: host=1-3,usb3=1
    usb1: host=1-4,usb3=1
    vmgenid: 11a753d0-e5ee-4ced-aae6-cd0b73ee7bf2
     
     
     
    yomi
    Guest
    #4
    0
    18.01.2022 14:52:00
    К сожалению, это решение мне не подходит, так как мне нужно, чтобы USB-устройства были подключены к ВМ.
     
     
     
    proxymeaty
    Guest
    #5
    0
    27.03.2023 17:10:00
    В зависимости от того, что вам нужно выполнить при выключении VM, systemd таймер, проверяющий статус VM, может быть хорошим вариантом. У меня есть сценарий использования для этого, где основная функция Proxmox хоста — это запуск единственной VM, используемой как настольная машина с GPU passthrough. Пользователю этой настольной VM не нужно — и он совсем не хочет — знать о Proxmox, пока все USB порты назначены VM, за исключением того, что, к сожалению, выключение VM (очевидно, из гостевой ОС) не выключает хост даже при использовании хукскриптов. Следующий systemd таймер и Python скрипт, использующий Proxmox API через библиотеку proxmoxer, решает эту проблему и выключает хост через несколько минут после выключения настольной VM. Он также пытается убедиться, что хост выключен только в том случае, если настольная VM действительно была запущена и затем выключена, чтобы избежать того, что хост будет постоянно выключаться в порочном круге, например, если VM не удалось запустить после загрузки по какой-то причине и администратору нужно работать с хостом.

    Создайте файл /etc/systemd/system/desktop-shutdown.timer
    Код:
    [Unit]
    Description=Проверка, выключена ли настольная VM

    [Timer]
    OnBootSec=5min
    OnUnitActiveSec=5min
    Unit=desktop-shutdown.service

    [Install]
    WantedBy=timers.target

    Создайте файл /etc/systemd/system/desktop-shutdown.service
    Код:
    [Unit]
    Description=Проверка, выключена ли настольная VM

    [Service]
    Type=oneshot
    ExecStart=python /var/lib/vz/snippets/desktop-shutdown.py

    [Install]
    WantedBy=multi-user.target

    Создайте файл /var/lib/vz/snippets/desktop-shutdown.py и замените заполнители hostIP, password и VMID

    Python:
    import os
    from proxmoxer import ProxmoxAPI

    os.system('logger "Запуск desktop-shutdown.py"')
    proxmox = ProxmoxAPI("hostIP", user="root@pam", password="password", verify_ssl=False)
    is_vm_running = True if proxmox("nodes/prox/qemu/VMID/status/current").get()['status'] == 'running' else False
    tasks = proxmox("nodes/prox/tasks").get()
    host_last_start = max([ t['starttime'] for t in tasks if t['id'] == '' and t['type'] == 'startall' and t['status'] == 'OK' ])
    vm_last_start = max([ t['starttime'] for t in tasks if t['id'] == 'VMID' and t['type'] == 'qmstart' and t['status'] == 'OK' ])
    has_vm_started_after_boot = vm_last_start > host_last_start

    if not has_vm_started_after_boot:
           os.system('logger "Настольная VM не была запущена, никаких действий."')
    elif is_vm_running:
           os.system('logger "Настольная VM все еще работает, никаких действий."')
    else:
           os.system('logger "Настольная VM была выключена, выключение Proxmox хоста сейчас!"')
           os.system('shutdown -h now')

    pip install proxmoxer
    systemctl enable desktop-shutdown.timer

    Сообщите, если это оказалось полезным.
     
     
     
    promoxer
    Guest
    #6
    0
    22.12.2023 07:00:00
    У меня есть PVE7 и PVE8, кажется, это исправлено в PVE8. Я смог выключить /s /t 0 в Windows 10, и это позволило скрипту хука запуститься.
     
     
     
    Ozzie88
    Guest
    #7
    0
    16.01.2025 07:02:00
    У меня тоже самое (поведение сохраняется на момент 15 января 2025 года на последней версии). Если посмотреть логи, то видно, что оно пытается запустить событие 'post-stop', пока ещё выгружает и перепроверяет USB-устройства, что занимает несколько секунд (достаточно долго). Я, честно говоря, удивлён, что оно так и делает, и не пытается повторить попытку через пару секунд или что-то в этом роде. Моим решением было PCIe-пассовать сами устройства USB-контроллера. Если вы используете driver-ctrl и скрипт вроде этого - https://www.reddit.com/r/Proxmox/comments/ual5hp/gpu_passthrough_that_provides_­virtual_terminal/ – то это должно быть довольно просто. Надеюсь, это поможет.
     
     
     
    adolfotregosa
    Guest
    #8
    0
    07.03.2025 00:03:00
    Ох, чувак, слава богу, я не свихнулся. У меня тут та же самая ситуация, но, к сожалению, не получается пройти через USB-контроллер. Надеюсь, разработчики Proxmox увидят эту тему и смогут исправить такое поведение! Спасибо.
     
     
     
    aaron
    Guest
    #9
    0
    19.08.2020 10:50:00
    Код, который должен сработать и запустить хук, сейчас выполняется, но сначала проверяет, выключена ли вообще VM. Вот где возникает ошибка "vm still running". Судя по всему, он проверяет, существует ли файл /var/run/qemu-server/<vmid>.pid и запущен ли процесс с PID, указанным в этом файле. Почему-то эта проверка приходит к выводу, что VM всё ещё работает.
     
     
     
    Jayboyb
    Guest
    #10
    0
    06.08.2020 00:13:00
    У меня та же проблема. У меня есть две виртуальные машины: а) Catalina и б) Windows 10. Обе указывают на один и тот же скрипт "hook" только с определенным "post-stop hook".

    1) Когда я выключаю Catalina изнутри этой ВМ или останавливаю ВМ через графический интерфейс Proxmox, "post-stop hook" срабатывает.
    2) Когда я выключаю Windows 10 через графический интерфейс Proxmox, "post-stop hook" тоже срабатывает.
    3) Когда я выключаю Windows 10 изнутри Windows 10, машина вроде как выключается (как показывает веб-интерфейс), но "post-stop hook" не срабатывает.

    proxmox-ve: 6.2-1 (ядро: 5.4.44-1-pve)
    pve-manager: 6.2-6 (версия: 6.2-6/ee1d7754)
    pve-kernel-5.4: 6.2-3
    pve-kernel-helper: 6.2-3
    pve-kernel-5.4.44-1-pve: 5.4.44-1
    ceph-fuse: 12.2.11+dfsg1-2.1+b1
    corosync: 3.0.3-pve1
    criu: 3.11-3
    glusterfs-client: 5.5-3
    ifupdown: 0.8.35+pve1
    ksm-control-daemon: 1.3-1
    libjs-extjs: 6.0.1-10
    libknet1: 1.15-pve1
    libproxmox-acme-perl: 1.0.4
    libpve-access-control: 6.1-1
    libpve-apiclient-perl: 3.0-3
    libpve-common-perl: 6.1-3
    libpve-guest-common-perl: 3.0-10
    libpve-http-server-perl: 3.0-5
    libpve-storage-perl: 6.1-8
    libqb0: 1.0.5-1
    libspice-server1: 0.14.2-4~pve6+1
    lvm2: 2.03.02-pve4
    lxc-pve: 4.0.2-1
    lxcfs: 4.0.3-pve2
    novnc-pve: 1.1.0-1
    proxmox-mini-journalreader: 1.1-1
    proxmox-widget-toolkit: 2.2-7
    pve-cluster: 6.1-8
    pve-container: 3.1-8
    pve-docs: 6.2-4
    pve-edk2-firmware: 2.20190614-1
    pve-firewall: 4.1-2
    pve-firmware: 3.1-1
    pve-ha-manager: 3.0-9
    pve-i18n: 2.1-3
    pve-qemu-kvm: 5.0.0-4
    pve-xtermjs: 4.3.0-1
    qemu-server: 6.2-3
    smartmontools: 7.1-pve2
    spiceterm: 3.1-1
    vncterm: 1.6-1
    zfsutils-linux: 0.8.4-pve1
     
     
     
    Jayboyb
    Guest
    #11
    0
    08.08.2020 15:29:00
    Может кто-то подтвердит, что может запускать "post-stop hook" для Windows 10 при выключении изнутри VM? Какие-нибудь идеи, как это пофиксить? Это ошибка, которую стоит отправить в баг-трекер? Спасибо.
     
     
     
    Jayboyb
    Guest
    #12
    0
    14.08.2020 16:17:00
    Вывод для journalctl -u qmeventd.service -f -- Логи начинаются с Fri 2020-08-14 12:09:37 BST. --
    14 авг 12:09:39 jasper1 systemd[1]: Запуск PVE Qemu Event Daemon...
    14 авг 12:09:39 jasper1 systemd[1]: Запущен PVE Qemu Event Daemon.
    14 авг 12:57:19 jasper1 qmeventd[7035]: Запуск очистки для 122
    14 авг 12:57:19 jasper1 qmeventd[7035]: vm все еще работает. Похоже, Windows 10 все еще работает, хотя я сказал ей выключиться из самой ОС. У кого-нибудь есть идеи, как это можно отладить?
     
     
     
    aaron
    Guest
    #13
    0
    18.08.2020 14:08:00
    Запустил процесс KVM для виртуалки после того, как она вроде как выключилась? Можешь прогнать эту команду в SSH-сессии, чтобы следить за ней во время выключения VM Code: watch -n 0.5 'ps auxwf | grep "id <VMID>"'. Будет обновляться каждые полсекунды.
     
     
     
    Jayboyb
    Guest
    #14
    0
    18.08.2020 14:47:00
    Нет, процесс KVM исчезает из вывода ps, когда я выключаю Windows VM изнутри Windows. Прикладываю вывод из syslog при выключении ниже. Строки 17 и 18: Aug 18 13:33:29 jasper1 qmeventd[4260]: Starting cleanup for 122
    Aug 18 13:33:29 jasper1 qmeventd[4260]: vm still running ¯\_(ツ)_/¯ Что-то мешает срабатыванию хука после остановки, даже когда процесс KVM точно остановлен.
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры