Использование systemd для перевода компьютера в спящий режим на x секунд?

Вопрос или проблема

Как я могу отправить машину в сон/гибернацию на динамическое количество секунд и автоматически разбудить её после этого времени?

Пока у меня есть следующий скрипт, который я немного доработал:

#!/bin/bash
systemd-run --unit="WakeTimer" --on-active=${1}s  --timer-property='AccuracySec=1s' --timer-property='WakeSystem=true' ;systemctl suspend

Я могу вызвать вышеуказанный скрипт с аргументом и отправить мой Linux-компьютер в сон на определенное количество секунд. Это, кажется, работает, но я не уверен, что это правильный способ сделать это.
Кроме того, насколько я понимаю, это только приостанавливает машину, и мне интересно, есть ли более глубокий режим сна, в который я могу перевести машину, так как я хочу, чтобы она автоматически просыпалась только раз в неделю, а в остальное время использовала как можно меньше энергии.

Ответ или решение

Для решения задачи автоматизации перехода компьютера в состояние сна/гибернации с возможностью последующего пробуждения через заданный промежуток времени, система управления системными службами Linux — systemd — предоставляет достаточно мощные инструменты.

Ваш скрипт выглядит корректно, однако анализируя его реализацию, есть возможность улучшить как функциональность, так и читаемость кода. Рассмотрим несколько ключевых моментов:

1. Параметры скрипта

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

2. Типы сна

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

  • Фоновый сон (Suspend): В этом режиме система сохраняет состояние в оперативной памяти, тем самым позволяя быстро возобновить работу. Это самый быстрый режим, но он не оптимален с точки зрения потребления энергии.

  • Гибернация (Hibernate): В этом режиме состояние системы сохраняется на жестком диске, и система выключается. Этот режим более энергоэффективен, но время восстановления больше.

Рекомендуется использовать гибернацию (если поддерживается вашей системой) для достижения наилучшего результата, особенно если вы хотите, чтобы система оставалась в спящем состоянии длительное время.

3. Пример улучшенного скрипта

Ниже приведён более продвинутый и структурированный пример вашего скрипта с учетом вышеозначенных моментов:

#!/bin/bash

# Проверяем, передан ли аргумент и является ли он числом
if [[ -z "$1" || ! "$1" =~ ^[0-9]+$ ]]; then
    echo "Пожалуйста, укажите количество секунд для сна (число)."
    exit 1
fi

# Сохраняем переданное значение
SLEEP_SECONDS=$1

# Установка таймера на пробуждение с использованием системного демона systemd
systemd-run --unit="WakeTimer" --on-active=${SLEEP_SECONDS}s \
    --timer-property='AccuracySec=1s' --timer-property='WakeSystem=true'

# Если требуется режим гибернации, используем следующую строку.
# systemctl hibernate

# Для режима сна
systemctl suspend

4. Настройка системы

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

  • Проверка наличия файла подкачки (swap), размер которого должен быть не меньше объема оперативной памяти.
  • Обновление конфигурационных файлов grub для поддержки гибернации.

Заключение

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

Такой подход обеспечит вашему серверу или рабочей станции оптимальную производительность и долговечность.

Оцените материал
Добавить комментарий

Капча загружается...