質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Jenkins

Jenkinsとは、Apache TomcatなどのServletで動作しているサーバーベースシステムです。Jenkinsはオープンソースであり、LInux,Mac OS X,Windows,Solaris,FreeBSDとOpenBSDのためのパッケージがあります。

Q&A

解決済

3回答

2166閲覧

sshでリモート先に接続し、コマンドを実行しようとしたがうまくいかない

taquan1221

総合スコア11

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Jenkins

Jenkinsとは、Apache TomcatなどのServletで動作しているサーバーベースシステムです。Jenkinsはオープンソースであり、LInux,Mac OS X,Windows,Solaris,FreeBSDとOpenBSDのためのパッケージがあります。

0グッド

1クリップ

投稿2019/05/02 02:27

前提・実現したいこと

今回、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""
このように、コマンドで実行した場合うまくいっています。

なにか思い当たる節があれば、ご教示いただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mobilefan8

2019/05/02 02:41

run.sh のあるディレクトリはどこでしょうか?
taquan1221

2019/05/02 02:46

ありがとうございます。 /home/jenkins/go/src/github.com/<ユーザ名>/<リポジトリ名>配下に配置してあります。
scsi

2019/05/02 02:50

ssh -t -t jenkins@<APIサーバ> "cd /home/jenkins/go/src/github.com/<ユーザ名>/<リポジトリ名>; sh run.sh" は成功しますかね?
taquan1221

2019/05/02 10:33

ありがとうございます。こちらは、成功しませんでした。
guest

回答3

0

grep -v grepしているので大丈夫な気はしますが、こういうケースだと、このコマンドラインを実行しているsh自身がkillされているというのが過去の質問でありました。

現在稼働している”exe/main”が名称にはいったプロセスをkillする

を、killall exe/mainの1コマンドでやってみてください。

投稿2019/05/02 03:00

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taquan1221

2019/05/02 10:58

ありがとうございます。 確認してみましたが、やはりスクリプトは実行されていないようでした。別の方の回答でスクリプトが実行されているところまで確認できました。お手数おかけしました。
guest

0

run.sh が
/home/jenkins/go/src/github.com/<ユーザ名>/<リポジトリ名>配下
にあるのであれば、

sh

1sh run.sh

ではなく

sh

1sh ./run.sh

では?

投稿2019/05/02 03:26

mobilefan8

総合スコア85

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/05/02 03:37

同じです。
mobilefan8

2019/05/02 03:40

↑すみません、意味わかりません。
mobilefan8

2019/05/02 03:41

カレントディレクトリにPATHが通っているという保障は見当たらないですが?
otn

2019/05/02 03:48 編集

コマンド名の部分じゃないので、PATHは関係ないです。shにPATHが通って入れば十分です。 引数のファイル名にはPATHは無関係です。
scsi

2019/05/02 03:47

cdしてるので同じですね。
mobilefan8

2019/05/02 03:51 編集

あぁ、そういうことか。 納得です。
taquan1221

2019/05/02 11:00

ご回答ありがとうございます。 確認してみましたが、sh run.sh→sh ./run.shにしてみてもスクリプトは稼働しました。別の方の回答でsh→bashにしても稼働したので今回はshellの種類に起因した問題なのではと考えています。
guest

0

ベストアンサー

気になる点をあげます。

ps -ef | grep exe/main | grep -v grep | awk '{print "kill", $2}'|sh は ps の結果がなかったとき、(exe/mainを含むプロセスが実行中でないとき) どうなりますか?

説明では bash といわれているので、sh ではなくてbashにしてはどうですか?

投稿2019/05/02 02:53

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taquan1221

2019/05/02 10:57

ありがとうございます。 psの結果がなかったときですが、これはエラーを返してきません。これが挙動として正しいのか判断に迷う部分ではありますが、、 ご指摘のとおり、bashにしてみたところシェルスクリプトは実行されているようでした。ありがとうございます。go のプログラムがバックエンドで起動してはこないのですが、これはまた別の問題のように思えるのでそれはそれで調査します。
otn

2019/05/02 11:14

killしてるだけなので、シェルの酒類は関係ないです。 原因は別のところにあります。あるいは確認ミスで元々稼働していたか。
taquan1221

2019/05/04 07:48

なるほど、、、シェルスクリプト自体の実行はなんとかなったので一旦質問自体はクローズとします。(本来の目的は達成できなかったのですが、それはまた別の質問かなと思い。) 何度もご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問