Qual é a diferença entre shutdown 18:00 e 18:00 shutdown?

30

at 18:00 shutdown nowe shutdown 18:00eles estão iniciando o mesmo serviço? Eles funcionam da mesma maneira?

yang
fonte

Respostas:

48

at 18:00 shutdown nowcria um trabalho "at", que é executado no horário especificado pelo atdaemon ou talvez pelo crondaemon, dependendo do seu sistema.

shutdown 18:00inicia um processo no seu shell que aguarda até o tempo especificado e, em seguida, executa o desligamento. Este comando pode ser encerrado se, por exemplo, sua sessão do shell for encerrada.

O resultado líquido na maioria dos casos será o mesmo: o sistema é encerrado às 18:00.

Uma diferença é que, se você usar at, o trabalho será armazenado e se o sistema for desligado por outros meios antes das 18:00, após a inicialização novamente, o trabalho ainda estará aguardando a execução; se o tempo já tiver passado, o desligamento será realizado imediatamente, o que pode ser inesperado.

Outra diferença é que shutdown 18:00criará um /run/nologinarquivo 5 minutos antes da hora agendada para impedir que as pessoas efetuem login após esse momento. As mensagens de difusão também serão enviadas para avisar aos usuários conectados que o sistema está prestes a ser desligado.

Você precisa levar em conta essas diferenças para decidir qual usar.

Wurtel
fonte
11
" shutdown 18:00inicia um processo no seu shell que aguarda". E se você sair antes disso?
RonJohn
11
@ RonJohn: Então depende se você usou nohupou o que disownquer que seja, se o logout normalmente mata processos em execução em segundo plano. Sistemas diferentes podem ter padrões diferentes para isso. (Estou supondo que ainda exista um sudo shutdownprocesso em execução, apenas sinalizando initpara iniciar um temporizador de desligamento. O último pode realmente ser o que acontece, mas não verifiquei recentemente. Ah, mas o @JdeBP tem; veja a resposta )
Peter Cordes
É realmente possível configurar atpara que funcione via em cronvez de atd?
terdon
3
Há um moderador de diamantes que não leu Como perguntar . (-: Você vai descobrir que esta pergunta foi feita há quatro anos na unix.stackexchange.com/questions/147643 .
JdeBP
"Também serão enviadas mensagens de difusão para avisar aos usuários que o sistema está prestes a ser desligado." Eu diria que essa é a diferença mais importante em servidores com muitos usuários, destacaria mais nesta resposta.
Jik
23

E agora, o sistema responde.

Se você possui o CentOS 7, possui um sistema operacional systemd e a resposta é diferente.

at 18:00 shutdown nowainda agenda pelo atsubsistema, mas esse shutdowncomando, assim como o que você chama diretamente shutdown 18:00, é diferente. Na verdade, é o systemctlprograma do systemd . systemctlfaz as coisas de maneira diferente.

Antes de tudo, systemctlenvia a solicitação de desligamento agendado para ser processada por um daemon, praticamente como no atcaso. Este é um daemon do systemd, no entanto, especificamente logind(o systemd-shutdownddaemon foi removido do systemd em maio de 2015, cuja alteração já percorreu as versões menores posteriores do CentOS 7), não o atsubsistema. systemctlcomunica um protocolo interno a um intermediário de barramento de desktop (em todo o sistema) que, por sua vez, se comunica logind.

Assim, como no atcaso, não há shutdownprocesso parado, contando e gerando as wallmensagens. Portanto, é possível efetuar logout e isso não afetará o agendamento, e o cancelamento não é tão simples como simplesmente interromper / interromper o processo de primeiro plano da sessão de logon. Assim como com at.

Ainda existem mensagens, diferentemente do atcaso, mas são emitidas por logind. Diferentemente do atcaso, o trabalho agendado não persiste nas reinicializações do sistema; portanto, um desligamento real cancela um agendado. Não é um arquivo no sistema de arquivos, mas está sob /run/systemd/shutdowno qual é o armazenamento não-persistente.

Outras diferenças são que pode haver apenas um desligamento agendado por vez, enquanto é possível enviar vários attrabalhos, e o Policy Kit aplicará regras a serem shutdownexecutadas no contexto de não sessão de login como um attrabalho diferente das regras aplicadas na shutdownexecução. contexto da sessão de login. O último pode ser mais permissivo, permitindo (digamos) que um usuário sem privilégio conectado à sessão de logon ativo desligue o sistema.

Leitura adicional

JdeBP
fonte