Сервер, о котором этот цикл, — не стойка и не мини-ПК, а ноутбук 2013 года, который иначе пылился бы на полке. Ноутбук неожиданно хорош как домашний сервер: тихий, ест мало, а его батарея — готовый источник бесперебойного питания. Но чтобы он работал круглые сутки и сам поднимался после отключения света, пришлось пройтись по BIOS, systemd и роутеру. А через полтора месяца он «сам перезагрузился», и следствие заняло вечер.

Это вторая часть цикла «Домашняя инфраструктура».

Что за железо

УзелЧто стоитЧто это значит
процессорCore i3-3217U: 2 ядра, 4 потока, 1,8 ГГц без турбо, 17 Втна полтора десятка сайтов с кэшем хватает; тяжёлые сборки фронта — уже ощутимо
память4 ГБ DDR3L, второй слот свободен, максимум 16главное узкое место; система видит около 3,2 ГБ
дискSSD 128 ГБ, SMART без ошибокместо кончается раньше всего остального
сетьгигабитный EthernetWi-Fi, Bluetooth и дискретную видеокарту отключили в modprobe.d

Попутная находка: у этого i3 нет аппаратного ускорения AES — Intel вырезал его у младших моделей поколения. Шифровать диск целиком я не стал: на таком процессоре это заметно медленнее, и вдобавок шифрование требует пароля при загрузке, а сервер должен вставать сам.

BIOS: чтобы вставал без человека

  • Wake on LAN — включён. Сначала я записал «в этой модели WoL нет» — оказалось, пункт просто спрятан в BIOS;
  • пароль администратора BIOS — задан, пароль на загрузку — выключен. Иначе после пропажи света машина будет ждать ввода пароля у экрана;
  • загрузка по сети — выключена, режим диска — AHCI, меню загрузки по F12 — включено (у этой модели по умолчанию выключено, а без него не загрузиться с флешки).

systemd: не спать, не реагировать на крышку

Ноутбук по умолчанию засыпает, когда закрывают крышку или долго не трогают клавиатуру. На сервере это авария. Сон запрещаем целиком и отключаем реакции:

systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

# /etc/systemd/logind.conf.d/99-server.conf
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore     # ноутбук всегда от сети — работает именно эта строка
HandleLidSwitchDocked=ignore
IdleAction=ignore

Экран при открытой крышке пусть гаснет сам: через параметр ядра consoleblank=10800 в GRUB (три часа). setterm --blank больше 60 минут не умеет.

Свет пропал — кто включит сервер

Пока свет моргнул на минуту, ноутбук просто доработает на батарее. Если батарея села, после возвращения питания он сам не включится. Тут помогает роутер: он поднимается первым и умеет будить машины пакетом Wake on LAN.

Со стороны Linux WoL надо разрешить у сетевой карты — в netplan строкой wakeonlan: true и на всякий случай службой, которая при старте делает ethtool -s <интерфейс> wol g. Проверка: ethtool <интерфейс> | grep Wake-on должен показать g.

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

/system script add name=wake-server source={
  :if ([/ping 192.168.88.10 count=2] = 0) do={
    /tool wol mac=AA:BB:CC:DD:EE:FF interface=bridge
    :log warning "server down, WoL sent"
  }
}
/system scheduler add name=wake-server interval=5m on-event=wake-server

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

Проверка перезагрузкой: весь стек поднялся сам. Перед любыми работами с выключением полезно убедиться, что у всех контейнеров есть политика перезапуска и службы стоят в автозагрузке. У нас при последней проверке у 30 контейнеров из 30 политика была — 10 always, 20 unless-stopped.

«Сервер сам перезагрузился»

Через полтора месяца аптайм показал девять с половиной суток, хотя я ничего не перезагружал так давно. Подозреваемых было четыре: ядро, автоматические обновления, питание, крон. Сначала — где искать следы. И тут три ловушки подряд:

  • last пуст: в Ubuntu 26.04 нет wtmp;
  • journalctl --list-boots бесполезен: при лимите журнала 500 МБ и примерно 140 МБ в неделю он помнит около семи с половиной дней, а нужная загрузка была раньше;
  • текстовые журналы /var/log/syslog.N и auth.log.N на месте, но время там в ISO: 2026-09-07T21:40:10+03:00. Поиск grep "^Sep 7" молча не находит ничего. На этом я потерял два захода.

С правильным шаблоном ответ нашёлся одной строкой:

$ zgrep -h 'Power key' /var/log/auth.log*
2026-09-07T21:40:10+03:00 … systemd-logind: Power key pressed short.
2026-09-07T21:40:10+03:00 … systemd-logind: Powering off...

Кто-то коротко нажал кнопку питания, сервер штатно выключился, через пять с половиной минут его включили обратно. Крышку я обезвредил, а реакцию на кнопку оставил по умолчанию — «выключиться». Остальные версии отпали проверкой: ядро стоит с начала месяца, автоматическая перезагрузка после обновлений закомментирована, при обрыве питания не было бы аккуратной остановки служб, в кроне перезагрузок нет.

# /etc/systemd/logind.conf.d/99-server.conf — что стоит дописать сразу, а не после такого вечера
HandlePowerKey=ignore
HandlePowerKeyLongPress=poweroff     # долгое нажатие по-прежнему выключает — на случай, если очень надо

Что осталось открытым

  • батарея всегда заряжена на 100%, ограничения заряда в BIOS нет — со временем она может вздуться. Раз в пару месяцев стоит смотреть на корпус;
  • память 4 ГБ — главное ограничение. Второй слот свободен, следующий шаг — +8 ГБ, и об этом будет отдельный разбор после установки;
  • живую проверку «выключить и дождаться, что разбудит роутер» я так и не провёл. Пока это работает только на бумаге.

Хотите поднять домашний сервер на старом железе?

Напишите, что за машина, — подскажу, что настроить, чтобы она жила сутками без вашего участия.

· полезно?
АЧ
Алексей Чикун веб-разработчик, команда TRIOHEAD

Делаю сайты и сервисы целиком: от вёрстки до сервера. Пишу о том, что проверил на своих проектах.

Комментарии

// загружаю комментарии…

Комментарии публикуются после проверки. Ссылки и HTML не принимаются.