Meus temporizadores de usuário do Systemd são perdidos após uma reinicialização. Eu os ativei systemctl --user enable --now x.timer
e ativei a persistência. Imediatamente após ativar os temporizadores, eles iniciam normalmente e são listados em systemctl --user list-timers
. Mas após a reinicialização, os temporizadores ficam todos inativos novamente.
SO é Debian 12
Após a reinicialização:
$ systemctl --user list-timers --all
NEXT LEFT LAST PASSED UNIT ACTIVATES
0 timers listed.
Habilitando os timers, eles rodam normalmente até a próxima reinicialização:
$ systemctl --user enable --now x.timer
$ systemctl --user list-timers
NEXT LEFT LAST PASSED UNIT
Sat 2024-04-27 14:21:22 EDT 1h 19min left - - x.timer
Além disso, após uma reinicialização quando os temporizadores são perdidos, systemctl --list-dependencies
mostra o temporizador, mas não está ativado:
$ systemctl --user list-dependencies timers.target
timers.target
○ └─x.timer
Depois de ativar o temporizador:
$ systemctl --user list-dependencies timers.target
timers.target
● └─x.timer
x.serviço:
[Unit]
Description=redacted description
[Service]
ExecStart=/usr/bin/redacted
[Install]
WantedBy=default.target
x.timer
[Unit]
Description=redacted description
[Timer]
OnCalendar=*-*-* 1,9,17:30:00
RandomizedDelaySec=1h
Persistent=true
[Install]
WantedBy=timers.target
Para corrigir isso, certifique-se de que o
systemd-user
serviço esteja ativado e iniciado:systemctl enable systemd-user
systemctl start systemd-user
Este serviço é responsável por gerenciar os serviços e temporizadores do sistema do usuário.
Além disso, certifique-se de que a
lingering
opção esteja habilitada para seu usuário:loginctl show-user <username> | grep Lingering
Se não estiver habilitado, você pode habilitá-lo com:
loginctl enable-linger <username>
Depois de fazer essas alterações, reative seus temporizadores e verifique se eles persistem após a reinicialização.
Se você continuar tendo esses problemas estranhos, examine os logs do Systemd em busca de erros ou avisos relacionados aos seus temporizadores ou serviços de usuário.
Editar para o solicitante
Obrigado por me avisar nos comentários!
A ausência do
systemd-user
serviço é uma pista fundamental.Tente ativar o
user systemd manager
serviço para iniciar automaticamente na inicialização:systemctl enable user@$(whoami)
Obviamente substituindo
whoami
pelo seu nome de usuário real.Se isso também não funcionar, também tentarei verificar os logs do gerenciador do usuário systemd :
journalctl -u user@$(whoami)
Lembre-se de que os serviços e temporizadores do usuário systemd são armazenados em
~/.config/systemd/user/
, portanto, certifique-se de que os temporizadores do usuário estejam localizados neste diretório e tenham a propriedade e as permissões corretas.Segunda edição
Acho que a mensagem de erro "Os arquivos da unidade não têm configuração de instalação" indica que o
[email protected]
arquivo não deve ser ativado ou iniciado diretamente.Como o serviço já foi iniciado na inicialização e não há erros no diário do usuário, você estava certo, acho que o problema pode estar relacionado aos próprios temporizadores, como você disse.
Em primeiro lugar, verifique se os arquivos do temporizador estão localizados
~/.config/systemd/user/
e possuem a propriedade e as permissões corretas.Verifique se há pequenos erros de digitação nos arquivos do cronômetro, o que parece um conselho estúpido, mas na verdade, na maioria das vezes, esse é um motivo comum para as coisas não funcionarem, já que o código e os comandos devem ser tão exatos que um pequeno erro de digitação pode estragar tudo.
Execute também:
systemctl --user status <timer_name>.timer
para verificar seu status.Se tudo parecer correto, vamos examinar um pouco mais detalhadamente o processo de ativação do temporizador .
Tente executar
systemd-analyze plot > boot.html
(como usuário) e inspecione o gráfico gráfico de inicialização para ver se há algum problema ou atraso no horário em que os temporizadores deveriam iniciar.Visto que esse problema é um pouco estranho, há muitos problemas diferentes que podem estar causando isso, então você apenas terá que continuar tentando e tentando até que seja corrigido - porque o problema é o seguinte: todo problema de computador, não importa o quão difícil, é fixável.
Ok, talvez não seja todo problema de computador, mas tenho certeza que esse é!
Respondendo à minha própria pergunta:
Meus diretórios de usuários são montados em um disco separado (uma matriz raid btrfs) do meu sistema operacional e estavam
[email protected]
sendo iniciados antes da conclusão da montagem do disco. O[email protected]
tem um arquivo de substituição drop-in instalado por padrão que adiciona umAfter=systemd-user-sessions.service
, então adicionei outra substituição drop-insystemd-user-sessions.service
que adiciona uma dependência à minha montagem.