원격 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성공 여부와 관계없이 로컬 시스템을 종료하려면 &&로 바꾸면 됩니다 ;.

관련 정보