Files
AWG2_harness/reboot_module/README.md
T

3.1 KiB

reboot-scheduler

reboot-scheduler — небольшой systemd-сервис на Rust, который раз в запуск планирует перезагрузку в случайную секунду окна [01:00, 02:00) UTC, затем запрашивает reboot через systemctl --no-block reboot.

Состав репозитория

reboot-scheduler/
├── src/
│   └── main.rs
├── Cargo.toml
├── Cargo.lock
├── reboot-scheduler.service
├── .gitignore
└── README.md

Требования

  • Linux x86_64
  • systemd
  • Rust toolchain (cargo + rustc)
  • Поддерживаемые дистрибутивы: Debian 12/13 (и совместимые)

Сборка

cargo build --release

Итоговый бинарь:

target/release/reboot-scheduler

По умолчанию release-сборка даёт динамически связанный glibc-бинарь. Это штатное поведение.

Установка

Команды выполняются от root (или через sudo).

mkdir -p /opt/reboot-scheduler
cp target/release/reboot-scheduler /opt/reboot-scheduler/reboot-scheduler
chmod 755 /opt/reboot-scheduler/reboot-scheduler

cp reboot-scheduler.service /etc/systemd/system/reboot-scheduler.service
chmod 644 /etc/systemd/system/reboot-scheduler.service

systemd-analyze verify /etc/systemd/system/reboot-scheduler.service
systemctl daemon-reload
systemctl enable --now reboot-scheduler.service

Поведение сервиса

  1. На старте вычисляет целевой timestamp в окне (01:00, 02:00) UTC.
  2. Ожидает наступления времени, проверяя раз в 30 секунд.
  3. Вызывает systemctl --no-block reboot.
  4. Завершается:
    • кодом 0, если reboot-запрос принят;
    • кодом 1, если команда завершилась ошибкой или не запустилась.

Это важно для корректной работы Restart=on-failure в unit-файле.

Логирование

Сервис не пишет в собственные файлы. Логи идут в journald (stdout/stderr):

journalctl -u reboot-scheduler -f

Формат сообщений:

[YYYY-MM-DD HH:MM:SS UTC] Сообщение

Управление

systemctl status reboot-scheduler
systemctl restart reboot-scheduler
systemctl stop reboot-scheduler
systemctl disable reboot-scheduler

Проверки качества

Рекомендуемый локальный прогон перед релизом:

cargo fmt --check
cargo clippy --all-targets --all-features -- -D warnings
cargo test --release
cargo build --release
file target/release/reboot-scheduler
ldd target/release/reboot-scheduler

Удаление

systemctl stop reboot-scheduler
systemctl disable reboot-scheduler
rm -f /etc/systemd/system/reboot-scheduler.service
rm -rf /opt/reboot-scheduler
systemctl daemon-reload