Как настроить автоматическое выключение Proxmox: 4 простых способа

Автоматическое выключение помогает экономить электроэнергию и корректно завершать работу Proxmox при простое или перебоях питания. В руководстве пошагово рассмотрены четыре способа: cron, скрипт проверки активности, таймер systemd и интеграция ИБП с NUT. Также описаны меры предосторожности, проверка настроек и согласование с резервным копированием.

download-icon
Скачайте Бесплатно
Для ВМ, ОС, БД, файлов, NAS и т.д.
mavis-yang

Обновлено Mavis Yang 2026/10/27

Оглавление
  • Что такое автоматическое выключение Proxmox?

  • Способ 1. Выключение по расписанию с помощью cron

  • Способ 2. Cron и скрипт проверки активности

  • Способ 3. Таймер systemd и скрипт

  • Способ 4. ИБП и интеграция с NUT

  • Защита ВМ при автоматическом выключении с помощью Vinchin

  • Часто задаваемые вопросы об автоматическом выключении Proxmox

  • Заключение

Автоматическое выключение Proxmox позволяет выключать хост, виртуальные машины и контейнеры без ручного вмешательства. Его можно запускать по расписанию, по результатам проверки активности или при событиях источника бесперебойного питания (ИБП). Это помогает экономить электроэнергию, защищать данные и уменьшать количество ошибок.

Важно: команды выполняются от имени root на хосте Proxmox VE и могут реально остановить его сервисы. Сначала проверьте их на тестовом узле. Для кластера, HA и общего хранилища необходим отдельный согласованный порядок остановки.

Что такое автоматическое выключение Proxmox?

Автоматическое выключение Proxmox — это выполнение задач завершения работы без участия администратора. Для этого используют cron, systemd или инструменты ИБП. Proxmox предоставляет команды qm и pct для штатного выключения ВМ и контейнеров. Виртуальные машины могут получать запрос через ACPI или QEMU Guest Agent, в зависимости от настроек. Если агент включен в параметрах ВМ, он должен быть установлен и запущен внутри гостевой ОС.

Если сервер простаивает ночью или его нужно выключать после резервного копирования, автоматизация помогает уменьшить энергопотребление и определить окно обслуживания. При этом следует убедиться, что резервное копирование действительно завершено.

Способ 1. Выключение по расписанию с помощью cron

Cron — простой способ выключать сервер по расписанию. Он не проверяет выполняющиеся задачи, поэтому выбранное время не должно пересекаться с важными операциями.

Например, для ежедневного выключения в 01:00 по времени хоста добавьте следующую строку в /etc/crontab или отдельный файл в /etc/cron.d/:

0 1 * * * root /usr/sbin/shutdown -h now

В личной таблице, открытой через crontab -e от имени root, поле root нужно убрать.

Сначала проверьте работу в окно обслуживания. Следующая команда реально планирует выключение через пять минут:

shutdown -h +5 "Test: shutdown in 5 minutes"

Чтобы отменить отложенное выключение до его начала, выполните:

shutdown -c

Для просмотра журнала cron используйте journalctl. Если на узле настроен /var/log/syslog, записи можно искать и в этом файле.

journalctl -u cron.service --since today --no-pager

При штатном выключении хоста Proxmox пытается корректно остановить гостей. Однако cron не проверяет текущие задания, поэтому резервное копирование или другие операции могут быть прерваны.

Способ 2. Cron и скрипт проверки активности

Скрипт позволяет проверить активность перед выключением и снизить риск остановки работающих ВМ или заданий.

Пример скрипта /root/shut.sh:

#!/bin/bash
set -o pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

exec 9>/run/proxmox-auto-shutdown.lock
flock -n 9 || exit 0

is_idle() {
  local ACTIVE_VMS ACTIVE_PCT ACTIVE_TASKS
  ACTIVE_VMS=$(qm list | awk 'NR > 1 && $3 != "stopped" {n++} END {print n+0}') || return 1
  ACTIVE_PCT=$(pct list | awk 'NR > 1 && $2 != "stopped" {n++} END {print n+0}') || return 1
  ACTIVE_TASKS=$(pgrep -f "pvesr|zfs scrub|vzdump") || [[ $? -eq 1 ]] || return 1
  [[ $ACTIVE_VMS -eq 0 && $ACTIVE_PCT -eq 0 && -z "$ACTIVE_TASKS" ]]
}

if is_idle; then
  sleep 1800 || exit 1
  if is_idle; then
    echo "$(date): System idle. Shutting down." >> /var/log/auto-shut.log
    shutdown -h now
  fi
fi

Проверка пропускает заголовки таблиц qm list и pct list. Если все гости остановлены и указанные процессы не найдены, скрипт ждет 30 минут, затем повторяет проверку перед выключением. Блокировка flock не позволяет запускать несколько экземпляров параллельно.

Это упрощенный пример: поиск процессов не обнаруживает все фоновые операции, в том числе задания внешних систем резервного копирования или выполняющийся в ядре ZFS scrub. Повторная проверка также не исключает запуск новой задачи сразу после нее. Используйте скрипт только с учетом своего расписания и ограничений.

Сделайте файл исполняемым:

chmod +x /root/shut.sh

Добавьте запуск каждые пять минут в /etc/crontab или файл в /etc/cron.d/:

*/5 * * * * root /root/shut.sh

Пока один экземпляр ожидает завершения 30-минутного интервала, остальные завершаются без действий. Не включайте одновременно фиксированное выключение из первого способа. В отличие от shutdown -h +30, ожидание sleep не создает отложенную команду shutdown: команда shutdown -c его не отменяет.

Способ 3. Таймер systemd и скрипт

Для управления запуском и просмотра журналов можно использовать systemd.

Скрипт /usr/local/bin/autoshutdown:

#!/bin/bash
set -o pipefail
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

exec 9>/run/proxmox-auto-shutdown.lock
flock -n 9 || exit 0

is_idle() {
  local ACTIVE_VMS ACTIVE_PCT ACTIVE_TASKS
  ACTIVE_VMS=$(qm list | awk 'NR > 1 && $3 != "stopped" {n++} END {print n+0}') || return 1
  ACTIVE_PCT=$(pct list | awk 'NR > 1 && $2 != "stopped" {n++} END {print n+0}') || return 1
  ACTIVE_TASKS=$(pgrep -f "pvesr|zfs scrub|vzdump") || [[ $? -eq 1 ]] || return 1
  [[ $ACTIVE_VMS -eq 0 && $ACTIVE_PCT -eq 0 && -z "$ACTIVE_TASKS" ]]
}

if is_idle; then
  sleep 600 || exit 1
  if is_idle; then
    echo "$(date): Confirmed idle. Shutting down." >> /var/log/autoshutdown.log
    shutdown -h now
  fi
fi

Здесь используется та же проверка, но ожидание составляет 10 минут. Сделайте файл исполняемым:

chmod +x /usr/local/bin/autoshutdown

Служба /etc/systemd/system/autoshutdown.service:

[Unit]
Description=Proxmox Auto Shutdown Service

[Service]
Type=oneshot
ExecStartPre=/bin/sleep 300
ExecStart=/usr/local/bin/autoshutdown

Таймер /etc/systemd/system/autoshutdown.timer:

[Unit]
Description=Proxmox Auto Shutdown Timer

[Timer]
OnCalendar=*-*-* 23:00:00
Persistent=false

[Install]
WantedBy=timers.target

Включите таймер:

systemctl daemon-reload
systemctl enable --now autoshutdown.timer

Служба запускается в 23:00 по времени хоста, ждет пять минут, затем выполняет скрипт с десятиминутным ожиданием и повторной проверкой перед выключением. Если условия выполнены, выключение произойдет примерно в 23:15. Пока служба выполняется, тот же таймер не запускает ее второй экземпляр. Persistent=false предотвращает запуск пропущенного события при следующем включении таймера.

Используйте только один из вариантов планового выключения. Чтобы отключить таймер и остановить уже выполняющуюся проверку до начала выключения, выполните:

systemctl disable --now autoshutdown.timer
systemctl stop autoshutdown.service

Способ 4. ИБП и интеграция с NUT

ИБП и Network UPS Tools (NUT) помогают организовать корректное выключение при сбое питания.

Установите NUT:

apt install nut

Настройте /etc/nut/nut.conf. Например, режим сервера, предоставляющего данные ИБП другим узлам:

MODE=netserver

Для одного локального узла без сетевых клиентов используется standalone, для клиента внешнего сервера NUT — netclient.

Затем настройте драйвер устройства в /etc/nut/ups.conf, доступ в /etc/nut/upsd.conf, пользователя мониторинга в /etc/nut/upsd.users и мониторинг в /etc/nut/upsmon.conf. Пример фрагмента upsmon.conf для основного узла с локальным сервером NUT:

MONITOR ups@localhost 1 monuser REPLACE_WITH_PASSWORD primary
SHUTDOWNCMD "/usr/bin/systemctl poweroff"

Это не полная конфигурация: имя ИБП, пароль и роль должны соответствовать остальным настройкам NUT. Для вторичного клиента используется secondary; старые версии могут использовать master/slave. Также проверьте MINSUPPLIES, POWERDOWNFLAG, штатную процедуру отключения выхода ИБП и запуск служб по документации установленного пакета.

Проверьте состояние ИБП:

upsc ups@localhost

Внимание: следующая команда вызывает настоящее принудительное завершение работы, а не безвредную имитацию сбоя. Она может затронуть другие системы, подключенные к тому же серверу NUT. Выполняйте ее только на стенде или в согласованное окно обслуживания.

upsmon -c fsd

Перед вводом схемы в эксплуатацию проверьте выключение гостей до остановки хоста. Замените идентификаторы на свои; обе команды действительно выключают соответствующего гостя:

qm shutdown <VMID> --timeout 60
pct shutdown <CTID> --timeout 60

Подберите достаточные тайм-ауты и запас батареи. Если у ВМ включен QEMU Guest Agent, убедитесь, что он установлен и запущен. Для контейнеров LXC этот агент не используется.

Защита ВМ при автоматическом выключении с помощью Vinchin

После настройки автоматического выключения важно обеспечить сохранность данных ВМ. Корректная остановка не заменяет резервное копирование.

Для защиты инфраструктуры Proxmox можно использовать Vinchin Backup & Recovery — корпоративное решение для резервного копирования ВМ с поддержкой Proxmox VE, VMware, Hyper-V, oVirt, RHV, XCP-ng, XenServer, OpenStack и других платформ.

Vinchin предлагает инкрементное резервное копирование, дедупликацию и сжатие, миграцию V2V и варианты быстрого восстановления. Эти функции помогают уменьшить объем резервных данных, ускорить задания и упростить восстановление после сбоев.

В веб-консоли резервное копирование ВМ Proxmox настраивается в четыре этапа:

1. Выберите виртуальные машины на хосте.

Выбор виртуальных машин Proxmox для резервного копирования

2. Выберите целевое хранилище резервных копий.

Выбор хранилища резервных копий в Vinchin

3. Настройте стратегию резервного копирования.

Настройка стратегии резервного копирования ВМ Proxmox

4. Проверьте параметры и создайте задание.

Создание задания резервного копирования ВМ Proxmox в Vinchin

Оцените возможности решения с помощью 60-дневной полнофункциональной пробной версии. Перед плановым выключением хоста дождитесь завершения заданий резервного копирования.

Часто задаваемые вопросы об автоматическом выключении Proxmox

1. Как проверить таймер или скрипт?

Проверьте состояние службы и ее журнал:

systemctl status autoshutdown.timer autoshutdown.service --no-pager
journalctl -u autoshutdown.service --no-pager

2. Что делать, если выключение зависает?

Используйте journalctl, чтобы определить, какая служба или гостевая система не завершает работу. Проверьте доступность гостевого агента и заданные тайм-ауты.

3. Можно ли изменить порядок выключения ВМ?

Да. Можно последовательно выполнять qm shutdown для выбранных ВМ, проверяя результат каждого шага. Для штатной остановки обычных гостей также доступны параметры Start/Shutdown order; выключение выполняется в порядке, обратном запуску.

Заключение

Автоматическое выключение Proxmox помогает экономить электроэнергию и организовать корректное завершение работы. Его можно запускать по расписанию, после проверки активности или при событиях ИБП. Выберите подходящий способ, проверьте его в своей среде и согласуйте с резервным копированием и допустимым временем простоя.

поделиться:

Категории: Виртуальная машина