O Systemd lê / etc / pm /…?

14

Os sistemas que usam systemdler e executar scripts estão inseridos /etc/pm/sleep.d/?

Estou começando a concluir que a resposta é que systemdignora esses scripts. Se isso for verdade, qual é a substituição?

Atualização: man systemd-sleepscripts de estados podem ser adicionados /lib/systemd/system-sleep/. Os detalhes foram insuficientes para mim, mas tentei modificar um exemplo do wiki do Arch e criei /lib/systemd/system-sleep/root-resume.service.

[Unit]
Description=Local system resume actions
After=suspend.target

[Service]
Type=simple
ExecStart=/bin/systemctl restart network-manager.service

[Install]
WantedBy=suspend.target

Minha intenção é reiniciar o gerenciador de rede depois de reiniciar, porque ocasionalmente não está funcionando.

Isso não parece estar fazendo o que eu quero.

Sean
fonte
Descobri que os scripts /etc/pm/sleep.d ainda serão executados se você digitar sudo pm-suspendcmdline. Apenas o systemd não o utilizará em seu fluxo de trabalho.
Tomofumi 13/08/19

Respostas:

13

Os scripts em /etc/pm/config.d|power.d|sleep.dsão ignorados em systemd. Em vez disso, uma "unidade" (serviço) do sistema deve ser criada e ativada.

Para reiniciar a rede após o sistema reiniciar, criei o arquivo /lib/systemd/system/root-resume.service:

[Unit]
Description=Local system resume actions
After=suspend.target

[Service]
Type=oneshot
ExecStart=/bin/systemctl restart network-manager.service

[Install]
WantedBy=suspend.target

Então eu ativei o serviço com sudo systemctl enable root-resume.service. A ativação do serviço cria um link simbólico para o arquivo em/etc/systemd/system/suspend.target.wants/

Ao contrário man systemd-sleepdos arquivos de serviço inseridos, /lib/systemd/system-sleep/são ignorados.

Sean
fonte
Sim, exatamente esse foi o motivo pelo qual os scripts "reiniciar a rede após uma suspensão" não estavam funcionando para pessoas executando o ubuntu com systemd.
Neo1691
Isso deve ser criado como /etc/systemd/system/root-resume.service. Você nunca deve modificar arquivos sob / lib, pois eles são gerenciados pelo gerenciador de pacotes, para evitar falhas e possíveis falhas na atualização, sem mencionar a simplificação de backups.
Hackel
2

Não, nem aqueles em /usr/lib/pm-utils/sleep.d. Mas ele executa todos os scripts (não os arquivos de serviço) /lib/systemd/system-sleep/com o conjunto de bits executáveis.

Aqui está um exemplo para chamar pm-powersave, modificado de /usr/lib/pm-utils/sleep.d/00powersave.

#!/bin/sh

# do not run pm-powersave on ARM during suspend; the 1.5 seconds that it takes
# to run it don't nearly compensate the potentially slightly slower suspend
# operation in low power mode
ARCH=`uname -m`

case $1 in
    pre)  [ "$ARCH" != "${ARCH#arm}" ] || pm-powersave false ;;          
    post) pm-powersave ;;
esac
exit 0

$ 1 é "post" no resumo, "pre" caso contrário. $ 2 em ambos os casos contêm "suspensão", "hibernação" ou "suspensão híbrida".

Martin Thornton
fonte