タイトルに記載されているように、コンピューターAで実行する必要があるスクリプトを作成しています。コンピュータAは、ssh
コンピュータBでプログラムBを実行し、セッションを終了してからssh
(プログラムBがまだコンピュータBで実行されている間)、コンピュータAでプログラムAを実行する必要があります。
Expectを使用し、これを行うにはSSHパスワードを使用する必要があります。
これまでに試した方法は次のとおりです(動作しません)。
#!/bin/bash
#checks to see if programA is already running
if pidof -x "programA" >/dev/null; then
echo "Program A already running"
exit 1
fi
spawn ssh username@{$1}
/usr/bin/expect "assword:"
send "password"
./programB & # run programB in the background
exit
./programA
両方のコンピュータでプログラムを終了する必要があるスクリプトは次のとおりです。
pkill programA
spawn ssh username@{$1}
/usr/bin/expect "assword:"
send "password"
pkill programB
exit
プログラムを起動するスクリプトが期待どおりに動作しません。コンピュータAでプログラムAとプログラムBを起動します。また、セッションを分離する必要があることもわかりましたssh
。それ以外の場合は、コンピュータ B でセッションを終了すると、プログラム B が終了します。
誰かが私が望むことを行い、私が間違っている部分を説明するスクリプトを提供できますか?
よろしくお願いします。
答え1
ほぼ大丈夫そうです。以下を試してみてください(明らかにテストされていません)。
#!/bin/bash
#checks to see if programA is already running
if pidof -x "programA" >/dev/null; then
echo "Program A already running"
exit 1
fi
expect <<EOF
spawn ssh username@${1}
expect "assword:"
send "password\r"
expect "$ "
send "nohup ./programB &\r" # run programB in the background
exit
EOF
./programA
編集:ssh username@ {$ 1}アドレスに関するコメント