Для тех, кого угораздило собрать себе NAS сервер на обычных комплектующих (считай - ПэКэ). Да, при всей моей приверженности ARM – всё ещё есть необходимость держать дома x86-железо.
Зачем
Вот вполне типичные проблемы эксплуатации “самосборного” NAS:
- Шум БП ATX
- Потребление энергии в холостом режиме
Но есть решение. Когда-то очень давно я наткнулся на проект, где автор “играет” с сетевым траффиком и, фактически, “будит” сервер по запросу и перенаправляет траффик на него.
Всё отлично, но, во-первых, проект давно почил в бозе, а во-вторых решение с перенаправлением трафика довольно сложное и не особо эффективное.
Однако, есть вторая часть проекта, которая позволяет измерять трафик на заданном интерфейсе и “укладывать спать” сервер при отсутствии оного.
Порядка пяти лет набор скриптов служил верой и правдой, отлично усыплял сервер и работал без сбоев. Но есть нюанс. Я совершенно не контролировал этот исходник и всё работало из серии “завелось и слава Б-гу”.
В рамках оптимизации было принято решение “всё переписать”. Цель – контроль и управляемость.
Требования
- Linux
- Работающая команда для перевода системы в спящий режим. Например,
systemctl suspend
- Способ возврата системы из спячки. Отлично подходит WOL (wake-on-lan)
- Утилита
sar
(обычно входит в пакет sysstat). Версия имеет значение, подробности в ссылке на проект. - Python 3
Как работает
Скрипт запускает измерение через sar. Если за выбранный период суммарный трафик (в килобайтах) был ниже или равен пороговому значению, то выполняется команда по усыплению системы.
В этот момент система остановлена. Если произошло пробуждение, то скрипт ждёт короткое время (дает системе “отстояться”), после чего запускает процесс измерения повторно. Ну и так по кругу.
Проект itself
Как обычно, на GitHub: