-
Что такое автоматическое выключение 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. Выберите виртуальные машины на хосте.

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

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

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

Оцените возможности решения с помощью 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 помогает экономить электроэнергию и организовать корректное завершение работы. Его можно запускать по расписанию, после проверки активности или при событиях ИБП. Выберите подходящий способ, проверьте его в своей среде и согласуйте с резервным копированием и допустимым временем простоя.