Отключение системы по тайм-ауту во время приостановки

Если вы хорошо разбираетесь в Perl, вам может пригодиться одна из подборок таких утилит. Здесь ввод TSV находится в файле z5:

$ recut 2,1 z5
2       1
20      10
200     100
2000    1000
20000   10000
300000  100000
3000000 1000000

Некоторая информация о перекройке в коллекции The Missing Textutils :

recut   Process fields like cut, allow repetitions and re-ordering. (what)
Path    : ~/bin/recut
Version : - ( local: RepRev 1.1, ~/bin/recut, 2010-06-10 )
Length  : 56 lines
Type    : Perl script, ASCII text executable
Shebang : #!/usr/bin/perl
Home    : http://www1.cuni.cz/~obo/textutils/ (doc)
Modules : (for perl codes)
 Getopt::Long   2.42

Наш магазин разработал тактику для решения подобных ситуаций:

$ my-tac --field=0 z5
2 1
20 10
200 100
2000 1000
20000 10000
300000 100000
3000000 1000000

Мы еще не выпустили нашу библиотеку, но если вы хотите -создать ее заново, вот помощь:

my-tac - reverse any one property: lines (like tac), fields, characters.

The default is to reverse the lines in a file, so a file like:
        a
        b
        c
will be printed as:
        c
        b
        a

usage: my-tac [options] -- [files]

options:

--help (or -h)
  print this message and quit.

--character
  Reverse order of characters in each line.  That is, given:
    abc
  the result is:
    cba

--field=0
  Reverse order of fields.  That is, given:
    Now is the time
  the result is:
    time the is Now

--field=i,j,k
  Reverse content of specific fields i,j,k.  That is given
    Now is the time
  my-tac --field=1,3  wil result in:
    woN is eht time

--para
  Reverse order of paragraphs, which are groups of lines
  separated by one of more empty lines.  If the last paragraph is
  not followed by an enpty line, one is supplied.

--number=n
  Print only n lines for a file reversal. <no limit>.

--debug
  Print internal debugging information.  <off>.
  (Must be first option.)

--separator=",re,string"
  Set the input separator to regular expression re, <\s+>, and
  the output separator to string, < >.  So the default is
  ",\s+, ".  Any character may be used in place of the comma, so
  you could specify:
    --separator=';\s+;|'

С наилучшими пожеланиями... ура, дрл

2
17.04.2021, 13:04
3 ответа

Если режим гибернации подходит, используйте команду systemd suspend-then-hibernate, которая переводит приостановленную систему в режим гибернации по истечении тайм-аута. В sleep.confустановите HibernateDelaySec=на желаемое значение.

Источник официальное руководство systemd .


РЕДАКТИРОВАТЬ:

Для использования режима гибернации необходимо перенастроить Fedora, чтобы включить его.

  1. Прежде всего вам понадобится раздел подкачки не менее размера вашей оперативной памяти -спящий режим означает сохранение содержимого ОЗУ в разделе подкачки, поэтому размер сам -объясняет. Обычно это означает уменьшение текущего раздела и создание нового раздела подкачки.

Инструкции по этому поводу есть здесь:

Не забудьте добавить раздел подкачки в /etc/fstabи активировать использование через swapon -a. Пример записи fstab -:

# swap:
UUID=abc123-this-is-a-uuid none swap sw 0 0
  1. Добавить параметр возобновления в файл initramfs. Fedora использует для этого dracut, и я буду следовать этому руководству .
  • создайте файл /etc/dracut.conf.d/resume.confсо строкойadd_dracutmodules+=" resume "(не забудьте пробелы)
  • бегdracut -f
  1. Добавьте раздел подкачки в grub, чтобы он знал, откуда возобновлять работу:
  • в /etc/default/grubищем строкуGRUB_CMDLINE_LINUX=
  • добавить resume=UUID=abc123-this-is-a-uuid(т.е. UUID подкачки)
  • обновить grub:grub2-mkconfig -o /boot/grub2/grub.cfgилиgrub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
  1. Не думаю, что это необходимо, но не помешает. Активируйте режим гибернации в/etc/systemd/sleep.conf:

    [Sleep]
    AllowHibernation=yes
    HibernateMode=shutdown
    
  2. Перезагрузите и проверьте режим гибернации :откройте несколько окон, запустите systemctl hibernate. Он должен закрыться, и окна возобновят работу после перезагрузки.

2
28.04.2021, 22:52

Не зная полного ответа, но это может помочь вам в поиске, отредактируйте /etc/systemd/logind.confи добавьте следующие строки.

IdleAction=poweroff
IdleActionSec=720min

Это приведет к отключению питания системы через 12 часов "бездействия". Но я не уверен, что сеанс считается бездействующим, если он приостановлен.

1
28.04.2021, 22:52

Fedora использует systemdв качестве общего менеджера системы, а Gnome по умолчанию передает операции Sleep/Standby/Suspend на systemd.

Предположим, что под «Приостановить» мы подразумеваем «Приостановить -до -ОЗУ» (в отличие от «-до -Диска» )и что под «Завершением работы» мы подразумеваем буквально «отключение машины», а также при условии, что машина оснащена аппаратными часами, которые поддерживают пробуждение системы и, таким образом, включены в BIOS / EFI в качестве допустимого устройства пробуждения, можно настроить systemdс помощью некоторых тщательно созданных «модулей». (как на языке systemd)для реализации самопроизвольного -отключения питания после определенного времени, проведенного в состоянии «Приостановка», а также без использования гибернации (или каких-либо выделенных подкачек/разделов )вообще во время переходов.

Эти настраиваемые systemdустройства, по существу, активируют пробуждение [Timer]непосредственно перед переходом в состояние «Приостановка», и после срабатывания тревоги система просыпается для выполнения пользовательского [Service], связанного с [Timer]. Такой [Service], конечно, выполняет операцию -отключения питания. Если вместо этого машина будет разбужена каким-либо другим способом, следовательно, таймер еще не истек, самовыключение питания -не выполняется и полностью отменяется.

systemdМодулей, которые я придумал для реализации такой логики, довольно много, поэтому вот сценарий оболочки, который устанавливает их все. Сценарий нужно запустить только один раз, так как "root" (через sudoможно ), чтобы настроить все в системе -широко(не пользователя -] широкая )конфигурацияsystemd:

#!/bin/sh --

sysd=/etc/systemd/system

set -e

mkdir -p "$sysd/systemd-suspend.service.d"

cat > "$sysd/systemd-suspend.service.d/99-trigger-system-back-after-suspend.conf" <<'EOF'
[Service]
ExecStopPost=-/bin/systemctl --no-block start system-is-back-after-suspend.target
EOF

cat > "$sysd/cancel-self-poweroff.service" <<'EOF'
[Unit]
Description=Cancel self-poweroff after suspend
After=system-is-back-after-suspend.target
Conflicts=self-poweroff.timer

[Service]
Type=oneshot
ExecStart=/bin/rm -f /run/systemd/system/self-poweroff.timer

[Install]
WantedBy=system-is-back-after-suspend.target
EOF

cat > "$sysd/self-poweroff.service" <<'EOF'
[Unit]
Description=Actual self-poweroff after suspend
After=suspend.target 
Before=system-is-back-after-suspend.target
RefuseManualStart=true

[Service]
Type=oneshot
ExecStart=/bin/systemctl --no-block poweroff
# Uncomment the following line while commenting out the above line for testing.
#ExecStart=/bin/echo poweroff
# Note the echoed string goes to systemd journal log.
# Do a `systemctl daemon-reload` after modifying this file.
EOF

cat > "$sysd/schedule-self-poweroff.service" <<'EOF'
[Unit]
Description=Schedulation of self-poweroff after some time spent in suspend state
Before=systemd-suspend.service
Requisite=suspend.target

[Service]
Type=oneshot
EnvironmentFile=/etc/self-poweroff.conf
ExecStartPre=/bin/sh -c 'printf -- %%s\\\\n "[Timer]" "Persistent=yes" "OnCalendar=$(date -d "now + ${MY_SUSPEND_TIMEOUT}" "+%%Y-%%m-%%d %%H:%%M:%%S")" "AccuracySec=1s" "WakeSystem=yes" >| /run/systemd/system/self-poweroff.timer'
ExecStart=/bin/systemctl start self-poweroff.timer
# On systemd 237 onwards (Fedora 28 onwards) you may uncomment the line below while commenting out the above ExecStart and ExecStartPre lines
#ExecStart=/bin/sh -c 'systemd-run --on-calendar="$(date -d "now + ${MY_SUSPEND_TIMEOUT}" "+%%Y-%%m-%%d %%H:%%M:%%S")" --timer-property=AccuracySec=1s --timer-property=WakeSystem=yes --timer-property=Persistent=yes --unit=self-poweroff.service'
# Do a `systemctl daemon-reload` after modifying this file.

[Install]
WantedBy=suspend.target
EOF

cat > "$sysd/system-is-back-after-suspend.target" <<'EOF'
[Unit]
Description=Synchronization point for self-poweroff after suspend
DefaultDependencies=no
After=suspend.target
StopWhenUnneeded=yes
EOF

cat > /etc/self-poweroff.conf <<'EOF'
MY_SUSPEND_TIMEOUT=12 hours
EOF

systemctl enable schedule-self-poweroff.service cancel-self-poweroff.service
systemctl daemon-reload

После запуска сценария для установки модулей можно изменить время ожидания в специальном файле /etc/self-poweroff.conf, который также создается сценарием. Там вы устанавливаете переменную MY_SUSPEND_TIMEOUTна любое желаемое количество времени, и вы можете выразить время в hoursи/или минутах(mins)и/или секундах(secs)в соответствии с датой date -dкоманды -синтаксического анализа способности.

1
28.04.2021, 22:52

Теги

Похожие вопросы