SSH를 사용하여 쉘 스크립트를 실행할 수 없습니다

SSH를 사용하여 쉘 스크립트를 실행할 수 없습니다

Java 애플리케이션을 시작하는 스크립트가 있습니다.

다음 파일 이름 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" 또는 이와 유사한 것일 수 있습니다. 스크립트에는 명령이 포함되어 있지 않으므로 cd루트의 홈 디렉토리에 있는 , 및 app.jar에 액세스하려고 시도합니다 startup.log. app.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

관련 정보