リモートLinuxシステムにファイルをリモートでコピーした後にサービスを再起動するには?

リモートLinuxシステムにファイルをリモートでコピーした後にサービスを再起動するには?

SCPを使用してリモートLinuxシステムにファイルをコピーしたいと思います。

定期的にホストとdnsmasq.confを更新し、SCP:/etc/hosts /etc/dnsmasq.confを使用してリモートシステムにコピーします。

その後、「sudo systemctl restart dnsmasq」を実行する必要があります。

私は上記以外に、リモートユーザーがリモートシステムで何もしないようにします。

ありがとうございます!

答え1

ファイルが変更されるたびに(変更した人に関係なく)サービスを再起動するには、次のことをお勧めします。incronリモートコンピュータから。

パッケージをインストールし、正しいincrontab項目を設定してください。

/etc/dnsmasq.conf IN_MODIFY systemctl restart dnsmasq

createrepoたとえば、ローカルリポジトリにrpmパッケージをアップロードするときにコマンドを実行するためにこれを使用しますが、スムーズに動作するようです。

答え2

@Fiximanが提案したように、次のコマンドを使用して必要な操作を実行できます。

ssh -o "PermitLocalCommand yes" -o "LocalCommand sleep 10 && sudo systemctl restart dnsmasq" user2@host2 "scp user1@host1:/path/to/source /path/to/target"

これは、ローカルファイルをリモートシステムにコピーするために実行されるscpと同時に10秒待ってからローカルシステムをシャットダウンします。残念ながら、成功するかどうかにかかわらず、10秒後に終了しますscp

システムが十分に新しい場合は、感嘆符を使用してローカルでコマンドの実行をサポートできます(PermitLocalCommandが有効な場合)。この場合、-o "LocalCommand sleep 10 && sudo systemctl restart dnsmasq"以下を使用する代わりに実行できます。

ssh -o "PermitLocalCommand yes" user2@host2 "scp user1@host1:/path/to/source /path/to/target && !sudo systemctl restart dnsmasq"

感嘆符は、ローカルシステムで実行されるコマンドを送信します。この場合、ローカルシステムは成功した場合にのみ終了し、不足しているscpパスワードがあるかどうかを尋ねられます。

scp成功したかどうかにかかわらず、ローカルシステムをシャットダウンするには、&&に置き換えます;

関連情報