前提・実現したいこと
今回、2台のサーバを立てました。
・Jenkinsサーバ
・APIサーバ
Jenkinsから、Jobで下記を実行したいと思っています。
ssh -t -t jenkins@<APIサーバ> "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@<APIサーバ> "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""
このように、コマンドで実行した場合うまくいっています。
なにか思い当たる節があれば、ご教示いただければと思います。
回答3件
あなたの回答
tips
プレビュー