Desligar o Windows pc antes que o CentOS 7 seja desligado

0

Usando o CentOS 7 Desejo desligar uma máquina Windows antes que o servidor Linux seja desligado.

Eu tenho trabalhado com net rpc / samba, mas não consigo fazer isso funcionar.

A maioria das perguntas que eu encontrei como a minha são o contrário (usando uma máquina Windows para desligar uma máquina Linux

    
por MartijnICU 09.12.2016 / 11:08

1 resposta

0

Você pode usar o net rpc para fazer isso - a sintaxe é:

net rpc SHUTDOWN -f -I <IP Address of Windows PC> -U <windows-username>

Se você estiver procurando scripts, precisará ter as credenciais do Windows salvas na máquina linux - isso pode variar de salvar em texto simples a autenticação Kerberos.

Aqui está uma pergunta muito parecida com algumas informações adicionais no lado das credenciais: link

Atualizar

Você pode criar um serviço systemd simples que será acionado durante um evento de desligamento (encerramento ou reinicialização). Existem duas abordagens principais para um serviço systemd acionado por desligamento / reinicialização

  • Disparar no serviço (seu serviço) ao encerramento. Isso indica que o sistema provavelmente está descendo MAS também pode significar que o próprio serviço foi instruído a parar; por exemplo. por um usuário. Essa é a abordagem usada abaixo.

  • Acionar a reinicialização, o desligamento e a segmentação / eventos do kexec. Descobri que isso é menos confiável e evito-os. Em seu sistema centos 7 você provavelmente tem um serviço (provavelmente não habilitado) instalado com um exemplo disso - /usr/lib/systemd/system/canberra-system-shutdown-reboot.service

Veja como criar o serviço systemd

  1. Crie um arquivo chamado (algo como) winpcshutdown.service . Precisa terminar com o sufixo .service , com esses conteúdos

file: winpcshutdown.service

[Unit]
Description=Issue Poweroff Command to Win PC

[Service]
ExecStop=/usr/local/sbin/shutdownScript.sh
Type=oneshot
RemainAfterExit=yes

[Install]   
WantedBy=multi-user.target
  1. Em seguida, crie o destino de ExecStop; shutdownScript.sh , que vamos passar para esse caminho. Este script irá emitir o comando net para o PC vencedor. Também verificaremos se não recebemos um comando de interrupção porque fomos intencionalmente interrompidos por motivos não relacionados ao ciclo de energia. EDIT: eu mudei os critérios aqui, pois era inconsistente; O systemctl que está executando o sistema retornará false se o estado do sistema estiver em transição, tanto na energização quanto (irrelevante aqui) ligado.

file: shutdownScript.sh

#!/bin/bash
# Check if the service is still enabled; if so then the stop order is legit.
if ! /usr/bin/systemctl -q is-system-running ; then
    /usr/bin/net rpc SHUTDOWN -f -I <IP Address of Windows PC> -U <windows-username>
else
  #Do Nothing
fi
  1. Execute os seguintes comandos para mover os arquivos para os locais corretos e para iniciar o serviço systemd

chmod 755 shutdownScript.sh
sudo cp shutdownScript.sh /usr/local/sbin/
chmod 644 winpcshutdown.service
sudo cp winpcshutdown.service /etc/systemd/system/
sudo systemctl daemon-reload e sudo systemctl enable winpcshutdown.service e sudo systemctl start winpcshutdown.service

Por fim, verifique se o serviço está ativo, consultando-o com este comando:     statusctl status winpcshutdown.service

Erros comuns no sistema -

  • Esquecendo as permissões de execução do conjunto no script que está sendo chamado pelo serviço
    • Esquecendo o shebang #!/bin/bash no script; O systemd não o executará sem que seja definido na própria chamada (script / usr / bin / bash) ou no cabeçalho.
  • Não incluindo caminhos completos para cada comando - o ambiente systemd é escasso e você não pode presumir que um executável esteja em seu caminho.

O comando journalctl pode ser usado para revisar os logs / eventos com o systemd e seu serviço.

    
por 09.12.2016 / 12:57