SSHを使用してシェルスクリプトを実行できない

SSHを使用してシェルスクリプトを実行できない

Javaアプリケーションを起動するスクリプトがあります。

Next ファイル名 start.sh

#!/bin/bash
java -jar ./app.jar --spring.profiles.active=dev > startup.log & 
echo $! > ./app.pid

そしてそれはライセンスがあります

-rwxrwxr-x 1 root root        41 Oct 22 20:58 shutdown.sh
-rwxrwxr-x 1 root root       144 Oct 22 20:58 startup.sh

マイコンピュータで同じスクリプトを実行すると、次のことが実行されます。

しかし、別のコンピュータで実行した場合(Jenkinsタスク)

ssh [email protected] '/opt/app/startup.sh'

実行していないか、jarが起動していません。

アップデート1

はい、他のコマンドが実行中です。

ssh [email protected] 'cd /home; ls -la'   
total 8
drwxr-xr-x  2 root root 4096 Jun 27  2017 .
drwxr-xr-x 22 root root 4096 May  2 12:06 ..

アップデート2 PATHとJAVA_HOMEの設定

# echo $JAVA_HOME
/usr/java/jdk1.8.0_181-amd64

# echo $PATH
/usr/java/jdk1.8.0_181-amd64/bin:/usr/java/jdk1.8.0_181-amd64/bin:/sbin:/usr/sbin:/usr/local/sbin:/root/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games

ベストアンサー1

ssh [email protected] '/opt/app/startup.sh'
...
#!/bin/bash
java -jar ./app.jar --spring.profiles.active=dev > startup.log & 
echo $! > ./app.pid

この方法で実行すると、startup.shプロセスの作業ディレクトリ(リモートシステムにあります)がrootユーザーのホームディレクトリになります。ディレクトリは、「/」または「/root」、または同様のものにすることができます。スクリプトにはコマンドが含まれていないため、cdルートのホームディレクトリにある、およびapp.jarにアクセスしようとしますstartup.logapp.pid指定されたファイルがルートのホームディレクトリに存在しない可能性があるため、app.jarjavaコマンドは何もできません。

これらすべてのファイルにアクセスするには、リモート/opt/appシステムの対応するディレクトリに変更する必要があります。

ssh [email protected] 'cd /opt/app && /opt/app/startup.sh'

あるいは、スクリプト内で正しいディレクトリに変更することもできます。

#!/bin/bash
cd /opt/app || exit 1
java -jar ./app.jar --spring.profiles.active=dev > startup.log & 
echo $! > ./app.pid

おすすめ記事