SO: Nobara Linux 41 (atualizado)
Procurei nos fóruns possíveis soluções para esse problema, mas ainda não consigo fazer funcionar.
Tenho um serviço criado pelo usuário que estou tentando executar na inicialização, mas ele não está sendo executado na inicialização. O serviço funciona bem quando executado manualmente.
Este é o serviço:
[Unit]
Description=CPU Performance Mode
[Service]
Type=oneshot
ExecStart=bash -c 'cpupower -c all frequency-set -g performance'
Restart=on-failure
[Install]
WantedBy=default.target
O objetivo deste serviço é definir os núcleos da minha CPU para o modo de desempenho com cpupower.
Ao executar
systemctl status cpuperformance.service
(o nome do serviço), obtenho:
Loaded: loaded (/etc/systemd/system/cpuperformance.service; enabled; preset: disabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf, 50-keep-warm.conf
Active: inactive (dead) since Sun 2025-03-09 22:38:28 CDT; 12min ago
Invocation: 7c187bdfd07c49c48fd6e94ccc34a0e3
Main PID: 1442 (code=exited, status=0/SUCCESS)
Mem peak: 1.3M
CPU: 6ms
Mar 09 22:38:28 HynixPC bash[1442]: Setting cpu: 16
Mar 09 22:38:28 HynixPC bash[1442]: Setting cpu: 17
Mar 09 22:38:28 HynixPC bash[1442]: Setting cpu: 18
Mar 09 22:38:28 HynixPC bash[1442]: Setting cpu: 19
Mar 09 22:38:28 HynixPC bash[1442]: Setting cpu: 20
Mar 09 22:38:28 HynixPC bash[1442]: Setting cpu: 21
Mar 09 22:38:28 HynixPC bash[1442]: Setting cpu: 22
Mar 09 22:38:28 HynixPC bash[1442]: Setting cpu: 23
Mar 09 22:38:28 HynixPC systemd[1]: cpuperformance.service: Deactivated successfully.
Mar 09 22:38:28 HynixPC systemd[1]: Finished cpuperformance.service - CPU Performance Mode.
Parece que o serviço foi executado com sucesso na inicialização, porém se eu
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
, obtenho:
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
powersave
Isso mostra que os núcleos da CPU estão usando o regulador de economia de energia e não o regulador de desempenho, como deveriam estar após a inicialização com este serviço.
Testei diferentes alvos "WantedBy", incluindo basic.target e multi-user.target. Ambos têm o mesmo problema. Toda vez que faço uma alteração no serviço, executo sudo systemctl disable cpuperformance.service
-> sudo systemctl daemon-reload
-> sudo systemctl enable cpuperformance.service
.
O resultado da ativação do serviço é: Created symlink '/etc/systemd/system/default.target.wants/cpuperformance.service' → '/etc/systemd/system/cpuperformance.service'.
Depois disso, o serviço ainda não consegue iniciar na inicialização.
Encontrei uma pista que pode mostrar por que isso não está funcionando. Executando systemctl --user list-dependencies default.target
, obtenho a seguinte saída:
default.target
○ ├─drkonqi-coredump-cleanup.service
● ├─drkonqi-sentry-postman.path
● ├─unity-gtk-module.service
● └─basic.target
● ├─systemd-tmpfiles-setup.service
● ├─paths.target
● ├─sockets.target
● │ ├─dbus.socket
● │ ├─drkonqi-coredump-launcher.socket
● │ ├─pipewire-pulse.socket
● │ └─pipewire.socket
● └─timers.target
○ ├─drkonqi-coredump-cleanup.timer
○ ├─drkonqi-sentry-postman.timer
● ├─grub-boot-success.timer
● └─systemd-tmpfiles-clean.timer
Isso mostra que meu cpuperformance.service personalizado não é desejado por default.target, o que não entendo, já que meu serviço especificamente tem isso listado.
Alguém tem alguma ideia sobre isso? Estou quebrando a cabeça com isso há horas. Qualquer ajuda é bem-vinda!
Depois de tentar várias coisas para fazer com que esse serviço fosse aplicado corretamente na inicialização; incluindo criar um novo serviço em usuário em vez de sistema (
sudo systemctl edit --full --force --user cpuperformance2.service
) e configurá-lo da mesma forma, adicionarAfter=
eRequires=
ao serviço e outras pequenas alterações, decidi abordar esse problema de forma diferente, pois nada estava funcionando para mim.Em vez disso, acabei usando rc-local-generator (veja
man systemd-rc-local-generator
). Resumindo, você pode colocar seu próprio script bash em um serviço que é chamado quando todos os outros serviços Linux forem iniciados.Se você é do futuro e está tendo o mesmo problema, eu recomendo fortemente seguir o tutorial escrito por Vivek Gite para usar o rc-local-generator também.
Meu /etc/rc.d/rc.local acabou ficando assim:
Na próxima reinicialização e execução
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
, estou vendo corretamente todos os núcleos da minha CPU no regulador de desempenho em vez do regulador de economia de energia.Li que usar rc-local-generator não é uma boa prática, pois cada serviço deve ser único e individual. No entanto, neste momento, essa é a única coisa que funciona para mim.
Há uma confusão entre os serviços do sistema e do usuário:
verifica a configuração do usuário systemd, mas
é um serviço do sistema.
O serviço obviamente roda. Acho que o problema é que as configurações são alteradas (por qualquer coisa) depois que o serviço roda. Você pode verificar isso adicionando um segundo
ExecStart
(depois do primeiro)e verificar o conteúdo do arquivo posteriormente.