質問: ### 前提・実現したいこと 今回、2台のサーバを立てました。 ・Jenkinsサーバ ・APIサーバ Jenkinsから、Jobで下記を実行したいと思っています。 ssh -t -t jenkins@ "cd /home/jenkins/go/src/github.com/<ユーザ名>/<リポジトリ名>; git pull; ps -ef | grep exe/main | grep -v grep | awk '{print \"kill\", \$2}'|sh; sh run.sh" 1.sshでAPIサーバにアクセスし 2.リポジトリからpullしてきて 3.現在稼働している”exe/main”が名称にはいったプロセスをkillする 4.そして、新しいプロセスを起動する(run.shの実行) run.shの中身 ``` echo "---start----" >> ./log nohup /usr/local/go/bin/go run main.go & echo $? >> ./log ``` ### 発生している問題・エラーメッセージ Jekninsのジョブに入れる前に、ターミナルから上記コマンドを実行したところ、エラーはでないのですが、run.shが実行されません。APIサーバ側のプロセスを確認しても 手動でrun.shを実行したあとに、上記コマンドを実行すると既存のプロセスがkillされていることから"sh run.sh"だけが動いていないように考えられます。 事前、事後のechoも動作していないことからgoのプログラム側ではなくbashの仕様の見落としなのではないかと考えております。 ### 試したこと ssh -t -t jenkins@ "cd /home/jenkins/go/src/github.com/<ユーザ名>/<リポジトリ名>; git pull; ps -ef | grep exe/main | grep -v grep | awk '{print \"kill\", \$2}'|sh; echo "test" >> ./log"" このように、コマンドで実行した場合うまくいっています。 なにか思い当たる節があれば、ご教示いただければと思います。
回答: 気になる点をあげます。 ps -ef | grep exe/main | grep -v grep | awk '{print \"kill\", \$2}'|sh は ps の結果がなかったとき、(exe/mainを含むプロセスが実行中でないとき) どうなりますか? 説明では bash といわれているので、sh ではなくてbashにしてはどうですか?