Como posso obter arquivos scp durante o desligamento do systemd?

0

Meu sistema tem certos arquivos que eu preciso transferir usando o scp enquanto um nó está sendo desligado.

Eu tenho um arquivo de serviço systemd que se parece com isso.

[Unit]
Description=My Transfer Service
After=multi-user.target sockets.target network.target auditd.service \
    timers.target sshd.socket [email protected] systemd-user-sessions.service \
    [email protected] system-sysctl.service paths.target swap.target \
    network-online.target

[Service]
Type=oneshot
ExecStart=/bin/echo "My Transfer Service"
ExecStop=/custom/dir/transfer.bash
RemainAfterExit=yes
TimeoutStopSec=0

[Install]
WantedBy=default.target timers.target

O script de transferência é semelhante a este

#!/bin/bash

scp -r /important/dir otheruser@target_node:~/
if [ "$?" != "0" ]
then
    echo "ERROR 'date': Failure to transfer" >> transfer_log
    exit 1
fi

echo "SUCCESS 'date'" >> transfer_log

As chaves ssh estão configuradas corretamente entre o usuário root do * este * sistema e o "outro_usuário" do outro sistema. Este scp não requer uma senha.

A transferência é bem-sucedida se eu executar o script como usuário root.

A transferência também será bem sucedida se eu usar o comando systemctl stop my-transfer

A transferência falhará quando eu chamar reboot . Quando eu entro de volta, vejo mensagens de erro no meu log.

Como posso usar o systemd para arquivos scp durante um desligamento? (Esta é uma distro RedHat)

Editar:

O erro que o scp me dá é

ssh_exchange_identification: Connection closed by remote host
lost connection

Minha saída serial até o serviço de transferência parar

         Stopping Load/Save Random Seed...
         Stopping Load/Save Screen Backlight...ness of backlight:acpi_video0...
[  OK  ] Stopped target System Time Synchr[  OK  ] Stopped Session c5 of user r.
         Stopping My-Transfer Service...
[  OK  ] Stopped Network Time Synchroni[  OK  ] Stopped Serial Getty on ttyS0.
[  OK  ] Stopped Load/Save Random Seed.
[  OK  ] Stopped Load/Save Screen Backlight ...htness of backlight:acpi_video0.
[  OK  ] Stopped My-Transfer Service.

Atualizar

A transferência é bem-sucedida no desligamento se um comando cp regular for usado. Isso não resolve o meu problema, mas prova que o erro está definitivamente relacionado ao scp de alguma forma.

O comando systemctl status my-transfer-service mostra que meu serviço está ativo (saiu) . O script transfer.bash também é geralmente executado por crond em vários intervalos durante a operação do sistema. Será que o cron também está tentando executar suas tarefas no desligamento?

    
por DeepDeadpool 13.04.2018 / 19:48

2 respostas

1

A falta do seu [Unit] é a linha mágica:

Conflicts=reboot.target

Isso deve fazer com que seu script de parada seja chamado antes que o serviço de reinicialização possa ser iniciado e a rede falhe.

    
por 14.04.2018 / 21:55
1

Vou postar isso como uma resposta, já que é o que eu fiz, e descobri que é muito mais fácil do que tentar empurrar todos os processos do sistema que eu encontrei.

Eu criei um script especial de desligamento para executar as ações antes de executar a reinicialização ou o desligamento. Aliasizei o desligamento para sudo /my/special/script.sh e segui um padrão semelhante para reinicialização, além do aliasing alias sudo = 'sudo ' . Eu também tive que adicionar este script aos arquivos sudoers para os usuários apropriados.

    
por 26.04.2018 / 18:53