[240123 백업]
centos nohup 스크립트 실행 불가 문제가 발생했다.
'nohup failed to run command 'java' no such file or directory' 문제. 즉, 자바를 읽지 못하는 문제이다.
문제 상황
1. /etc/progfile에 JAVA_HOME PATH 저장 후 root 계정과 chshin 계정 전부 적용됨을 확인한 상태이다.
두 계정 전부 echo $JAVA_HOME이나, java -version 등을 통해 성공적으로 경로가 등록되었다.
2. root 계정은 ./startup.sh 스크립트가 정상적으로 실행된다 (Scouter).
하지만 chshin의 경우 'nohup: redirecting stderr to stdout nohup: failed to run command `java': 그런 파일이나 디렉터리가 없습니다 ' 라는 CLI 로그와 함께 실행이 불가능하다.
#!/usr/bin/env bash
nohup java -Xmx1024m -classpath ./scouter-server-boot.jar scouter.boot.Boot ./lib > nohup.out &
sleep 1
tail -100 nohup.out
해결 방법
1. PATH 경로 확인
2. java 권한 확인
일반 사용자도 read 권한이 있는 걸 보니 딱히 문제 상황은 아닌 것 같다.
3. 스크립트에 export PATH 추가(해결)
#!/usr/bin/env bash
export PATH=/opt/java/bin:$PATH
#source ~/.bashrc 이건 아님
nohup java -Xmx1024m -classpath ./scouter-server-boot.jar scouter.boot.Boot ./lib > nohup.out &
sleep 1
tail -100 nohup.out
export 스크립트 추가를 통해 문제가 해결되었다.
분명 echo PATH 등으로 확인했을때 떴는데 왜..?
문제의 원인 : 비로그인셸
문제의 원인을 확인했다. 'shopt login_shell' 이나, 'echo $0'을 통해 현재 로그인 상태를 확인할 수 있었다.
reference :
https://goldsony.tistory.com/244
로그인 셸 vs 비로그인 셸의 환경 변수 로딩 차이
로그인 셸과 비로그인 셸은 환경 변수를 로드하는 방식이 다르다.
로그인 셸은 /etc/profile과 사용자의 ~/.bash_profile, ~/.bash_login, ~/.profile 등을 차례로 읽어 환경 변수를 설정한다.
반면, 비로그인 셸은 ~/.bashrc 파일을 읽어 환경 변수를 설정한다.
/etc/profile에서 설정된 PATH는 로그인 셸에서만 적용되므로, 비로그인 셸에서는 이 설정이 반영되지 않았던 것이다.
+ 로그인 셸로 로그인 방법
su 명령어를 사용하자.
현재 사용자로 다시 로그인하는 것처럼 su - [username] 명령어를 사용하여 새로운 로그인 셸 세션을 시작할 수 있다.
'CS study > Linux' 카테고리의 다른 글
[CentOS] 표준 시간대 변경 및 NTP를 사용한 동기화 (0) | 2024.04.04 |
---|---|
[tomcat] catalina.sh (difference between java_opts and catalina_opts) (0) | 2024.04.02 |