Você pode considerar usar o compartilhamento de conexão ssh:
Host *.some-domain
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
Você se conecta apenas uma vez ao seu destino e coloca o processo ssh em segundo plano. Então você executa os outros comandos e finalmente mata o primeiro processo.
Em alternativa, você pode tentar encapsular várias ações em uma única conexão ssh.
Por exemplo, imagine que você tenha um diretório:
mycommands
|
+- run
+- new_data
Em seguida, você pode compactar esses dados em um tar e enviá-los ao seu script:
tar cf - -C mycommands . | ssh localhost 'D='mktemp -d'; tar xf - -C $D; $D/run'
Agora, o script run
pode acessar todos os seus dados de entrada (aqui temos apenas new_data
, como no seu exemplo). Para ficar com o seu exemplo, aqui está o script run
:
#!/bin/sh
BASE='dirname $0'
/etc/init.d/some_service stop
cat /var/some_service/events
mv $BASE/new_data /var/some_service/new_data
/etc/init.d/some_service start
rm -rf $BASE
Então, agora você só precisa salvar o arquivo events
:
tar cf - -C mycommands . | ssh localhost 'D='mktemp -d'; tar xf - -C $D; $D/run' >./events
e, mais geralmente, você pode ter seu script run
produzindo um tar e, em seguida, canalizando ssh
para o TAR para descompactá-lo localmente.