Qual é a diferença prática entre 'systemctl start reboot.target' e 'systemctl reboot'?

3

Existem duas diferenças documentadas entre start reboot.target e reboot . Mas start reboot.target é o que é acionado por ctrl-alt-del.target .

Importa que ctrl-alt-del.target omita --job-mode=replace-irreversibly ? Em que situações isso causará um comportamento diferente? Por que é incluído por systemctl reboot ?

man systemctl

reboot [arg]

Shut down and reboot the system. This is mostly equivalent to start reboot.target --job-mode=replace-irreversibly, but also prints a wall message to all users.

man systemd.special

ctrl-alt-del.target: systemd starts this target whenever Control+Alt+Del is pressed on the console. Usually, this should be aliased (symlinked) to reboot.target.

    
por sourcejedi 25.07.2017 / 18:14

2 respostas

1

When queuing a new job, this option controls how to deal with already queued jobs. It takes one of "fail", "replace", "replace-irreversibly", "isolate", "ignore-dependencies", "ignore-requirements" or "flush". Defaults to "replace", except when the isolate command is used which implies the "isolate" job mode.

If "fail" is specified and a requested operation conflicts with a pending job (more specifically: causes an already pending start job to be reversed into a stop job or vice versa), cause the operation to fail.

If "replace" (the default) is specified, any conflicting pending job will be replaced, as necessary.

If "replace-irreversibly" is specified, operate like "replace", but also mark the new jobs as irreversible. This prevents future conflicting transactions from replacing these jobs (or even being enqueued while the irreversible jobs are still pending). Irreversible jobs can still be cancelled using the cancel command.

Isto sugere um efeito prático. Suponha que você "conecte unidades à lógica do estado de suspensão", usando sleep.target para inseri-las. Suas unidades de gancho não têm DefaultDependencies=no , então elas dependem de sysinit.target ... e Conflict com shutdown.target .

Se você executar systemctl start reboot.target e, em seguida, systemctl start suspend.target , parece que sua unidade de gancho irá parar shutdown.target . Agora systemd-reboot.service tem Requires=shutdown.target , por isso deve ser interrompido / cancelado também. ( umount.target não deve ser cancelado).

Verifiquei uma diferença de comportamento ao longo destas linhas e relatei isso como um defeito no rastreador de problemas do systemd .

    
por 27.07.2017 / 22:52
0

A partir da leitura da fonte do arquivo reboot.target , vemos que ctrl-alt-del.target é referenciado com Alias= , o que significa que é outro nome para o mesmo comando e funcionará da mesma maneira.

Olhando para o código-fonte de systemctl.c , nós veja também que systemctl reboot irá passar a opção replace-irreversibly .

Portanto, parece que todas as três variações de comandos de reinicialização que você encontrou funcionam da mesma forma: systemctl reboot , reboot.target e ctrl-alt-del.target .

Se você tiver uma proposta para melhorar a documentação, poderá modificar os arquivos XML de origem da documentação do systemd e envie um pedido de pull.

    
por 26.07.2017 / 19:49