여러 명령을 차례로 쌓기 위해 화면 명령을 사용하려고 합니다. 먼저 Python 스크립트를 실행한 다음 이와 같이 SSH 호스트에 연결합니다.
$HOSTNAME은 슬레이브 노드-1입니다. $arg는 arg2입니다.
screen -dmS 1 sh -c "python3 pyscript1.py arg && \
ssh -i ~/.ssh/my-ssh-key user@remote-node \
"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/' ~/test.txt"\
;exec bash"
내가 screen을 사용하는 이유는 이것이 내가 실행해야 하는 유일한 명령이 아니고, 실행되는 동안 pyscript1.py의 출력을 모니터링할 수 있어야 하기 때문입니다.
이 명령은 "1"이라는 새 화면을 생성하고 "arg" 인수를 사용하여 pyscript1.py 스크립트를 실행해야 합니다.명령이 완료될 때만, 이 명령을 사용하여 원격 호스트에 연결하여 파일을 변경하고 싶습니다.
exec bash의 목적은 명령이 완료된 후에도 화면을 열어 두는 것입니다.
sed 명령만 입력하면 작동합니다.
를 사용하여 "1"이라는 화면을 만들 수도 있습니다 screen -dmS 1
.
SSH를 사용하여 서버에 연결할 수도 있습니다.
그러나 위의 명령을 실행해도 아무 일도 일어나지 않습니다. 새로운 화면도 생성되지 않습니다.
내가 달릴 때
ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$ 1/' test.txt"
원하는 효과를 얻었어요
하지만 내가 시도할 때
screen -dmS 1 sh -c "ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$ 1/' test.txt";exec bash"
아무 일도하지
내가 뭘 잘못했나요?
답변1
여러 가지 인용 문제가 있습니다.
원래:
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt;exec bash"
줄 바꿈이 있는 사람이 읽을 수 있는 버전
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key "\
"user@remote-node "sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt;exec bash"
그럴 수도 있을 것 같아요
"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/ ~/test.txt"
인수는 이어야 합니다 ssh
.
수정된 코드:
screen -dmS 1 sh -c "python3 pyscript1.py arg && ssh -i ~/.ssh/my-ssh-key "\
"user@remote-node \"sed -i '/$HOSTNAME-pyscript1-$arg/s/$/1/' ~/test.txt\";"\
"exec bash"