Как временно отключить сон и спящий режим из командной строки
Кажется, что существует множество способов, которыми можно постоянно управлять настройками Ubuntu для сна, когда это необходимо, при условии соблюдения заранее определенных условий. Однако это более постоянные решения, в которых не учитываются редкие задачи, для которых может потребоваться временно перейти к стандартной политике. Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть очень долго работающий скрипт для создания резервных копий, и я не хочу, чтобы компьютер спал или находился в спящем режиме, пока этот конкретный процесс выполняется, что обычно занимает 30-50 минут. Следовательно, есть ли команда, которую я мог бы включить в свой сценарий резервного копирования, чтобы предотвратить переход системы в спящий / спящий режим во время выполнения сценария резервного копирования, и есть ли также команда для восстановления обычной политики электропитания по умолчанию после завершения резервного копирования?
что-то вроде
#!/usr/bin/bash
#disable normal powerpolicy
disable-power-policies
backup /dev/sda /dev/sdb /dev/fioa /dev/fiob
#enable power policies.
enable-power-policies
7 ответов
В Ubuntu 16.04 LTS я успешно использовал следующее для отключения suspend:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
И это, чтобы снова включить его:
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target
Самый удобный способ сделать это временно - использовать:
systemd-inhibit CMD [...]
Без дополнительных опций,
systemd-inhibit
будет выполнять
CMD
при временном отключении обнаружения бездействия (которое может автоматически приостанавливать/переводить компьютер в спящий режим), явного приостановки/перехода в спящий режим (например, вы случайно нажали клавишу сна на клавиатуре) и команд выключения.
Вы можете использовать его для вызова сценария резервного копирования следующим образом:
systemd-inhibit ./my-backup-task.sh
У меня была точно такая же проблема в прошлом году для резервного копирования, которая заняла несколько часов!
Вы можете попробовать Keep.Awake https://launchpad.net/keep.awake Он может отслеживать нагрузку на процессор, сетевой трафик и активность пользователя на предмет минимальных пороговых значений.
Я до сих пор не удосужился создать оснастку или деб для этого. Однако временно вы можете скачать программу с Launchpad здесь
Текущая версия стабильна и работает на всех версиях Ubuntu с 14 по 16 апреля. Тем не менее, я постоянно улучшаю его и буду добавлять новые функции.
Это работает как правильная команда. Введите --help, чтобы увидеть полный список того, что можно сделать. Ниже приведены лишь несколько примеров:
./keepawake.py --help
Для интерактивного запуска:
./keepawake.py
Для запуска в качестве фоновой службы:
nohup ./keepawake.py -r > /dev/null 2>&1 &
Чтобы запустить в качестве фоновой службы и установить 15 минут (900 секунд) как время активности пользователя, прежде чем он определит, что пользователь находится в режиме ожидания:
nohup ./keepawake.py -u 900 -r > /dev/null 2>&1 &
Чтобы запустить в качестве фоновой службы и установить минимальную нагрузку на процессор как 13%:
nohup ./keepawake.py -c 13 -r > /dev/null 2>&1 &
Чтобы запустить в качестве фоновой службы и установить минимальный сетевой трафик 5 КБ (5120 байт):
nohup ./keepawake.py -s 5120 -r > /dev/null 2>&1 &
Чтобы запустить все три настройки выше (сеть, ЦП, режим ожидания пользователя) за один раз:
nohup ./keepawake.py -s 5120 -c 13 -u 900 -r > /dev/null 2>&1 &
Ты можешь использовать gsettings
в вашем скрипте отключить автоматическую приостановку в настройках электропитания и снова восстановить поведение настроек электропитания по умолчанию.
Вот простая конфигурация, которая сначала получает текущее время ожидания для сна, отключает его и после выполнения некоторой задачи повторно включает его.
#!/bin/bash
#get the current timeout for automatic suspend both for on battey power and when plugged in.
a=$(gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout)
b=$(gsettings get org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout)
#Disable automatic suspend
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout 0
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout 0
#Your task here
sleep 5
#Enable the automatic suspend
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-timeout $a
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-timeout $b
Вот как это сделать в Xfce. (Спасибо g_p за ответ, который заставил меня бросить мяч.)
#!/bin/bash
# Grab current sleep timeout on battery and ac
a=$(xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac)
b=$(xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-battery)
# Set sleep to never on battery and ac
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac -s 14
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-battery -s 14
# Your task here
sleep 5
# Reset sleep to what it was before on battery and ac
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-ac -s "$a"
xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/inactivity-on-battery -s "$b"
Пытаться
caffeine
, который можно установить с помощью
sudo apt install caffeine
http://manpages.ubuntu.com/manpages/focal/man1/systemd-inhibit.1.html
systemd-inhibit - Execute a program with an inhibition lock taken
СИНТАКСИС
systemd-inhibit [OPTIONS...] [COMMAND] [ARGUMENTS...]
systemd-inhibit [OPTIONS...] --list
ОПИСАНИЕ
systemd-inhibit may be used to execute a program with a shutdown, sleep, or idle inhibitor
lock taken. The lock will be acquired before the specified command line is executed and
released afterwards.
Inhibitor locks may be used to block or delay system sleep and shutdown requests from the
user, as well as automatic idle handling of the OS. This is useful to avoid system
suspends while an optical disc is being recorded, or similar operations that should not be
interrupted.
For more information see the Inhibitor Lock Developer Documentation[1].