(해결) 시놀로지 NAS 시작할 때 원하는 프로그램을 실행할 수 있도록 하는 스크립트를 짜려고 합니다.
톰캣 서버 실행 파일 (startup.sh)의 경로와 시작 시 메시지는 아래와 같습니다.
RackStation> cd /volume1/@appstore/Tomcat7/src/bin/
RackStation> ./startup.sh
Using CATALINA_BASE: /volume1/@appstore/Tomcat7/src
Using CATALINA_HOME: /volume1/@appstore/Tomcat7/src
Using CATALINA_TMPDIR: /volume1/@appstore/Tomcat7/src/temp
Using JRE_HOME: /var/packages/JavaManager/target/Java/jre
Using CLASSPATH: /volume1/@appstore/Tomcat7/src/bin/bootstrap.jar:/volume1 /@appstore/Tomcat7/src/bin/tomcat-juli.jar
Tomcat started.
지금까지는 NAS를 키고 서버 컴퓨터에서 putty.exe를 통해 NAS 서버에 접속해서 수동으로 startup.sh를 실행시키고 putty.exe는 켜놓은 상태로 톰캣 서버를 운영하였습니다.
(putty.exe를 끄면 톰캣 서버도 꺼지기 때문에 계속 켜놓을 수 밖에 없었습니다)
근데 검색해보니 NAS 시작 시 원하는 프로그램을 자동으로 실행할 수 있게 할 수 있더라구요.
일단 참조한 주요 사이트들은 아래와 같습니다.
http://m.assayo.com/board_view.html?board=forum_nas&pid=11287
-> 시놀로지 실행 경로 참조
http://literatitech.blogspot.kr/2011/06/mymedia-automatic-startup-on-synology.html
-> 스크립트 참조
해서 만들어봤습니다.
만든 경로와 파일 이름은 /usr/syno/etc/rc.d/S99tomcat.sh 입니다.
코드는 아래와 같습니다.
####################################
# auto start tomcat
####################################
#!/bin/sh
case "$1" in
start) #시작시 행동
echo -n "Starting tomcat: "
/volume1/@appstore/Tomcat7/src/bin/startup.sh
echo
;;
restart) #재시작시
sleep 1
$0 start
;;
esac
그냥 콘솔창에서 ./S99tomcat.sh 으로 하면 톰캣 서버가 실행되는데
서버를 껐다 켰을 경우에는 자동으로 실행되지가 않습니다..ㅠㅠ
chmod를 통해 같은 경로에 있는 다른 파일들과 권한도 같게 설정해주었고 사용자,그룹도 root로 모두 동일한 것까지 확인했습니다.
.
.
.
.
.
== 해결 ==
로그를 남기는 방식으로 무슨 오류가 났는지 확인했고, 그 결과 자바 환경 변수가 세팅이 되어있지 않음을 알았습니다.
댓글 달아주신 분들 모두 감사합니다.
수정한 코드는 아래와 같습니다.
RackStation> cat /usr/syno/etc/rc.d/S12tomcat.sh
#!/bin/sh
export JAVA_HOME="/var/packages/JavaManager/target/Java/jre"
case "$1" in
start) #시작시 행동
echo -n "Starting tomcat: "
/volume1/@appstore/Tomcat7/src/bin/startup.sh
echo
;;
restart) #재시작시
sleep 1
$0 start
;;
*)
/bin/sh /volume1/@appstore/Tomcat7/src/bin/startup.sh &> /var/log/tomcat_log
;;
esac
exit 0
두 가지를 제안 드려봅니다. 1)
두 가지를 제안 드려봅니다.
1) /usr/syno/etc/rc.d/S99tomcat.sh 파일에 magic number를 최 상위로 옮김 (#!/bin/sh 를 주석 위로)
- 이건 혹여라도 부팅되는 시점에 magic number 파싱을 못해서 정상적으로 실행 못했을까봐. (가능성 낮음)
2) /usr/syno/etc/rc.d/S99tomcat.sh 파일 내에 /volume1/@appstore/Tomcat7/src/bin/startup.sh 을 실행시키는 구문을 "/bin/sh /volume1/@appstore/Tomcat7/src/bin/startup.sh" 와 같이 변경
- 권한 문제든 뭐든 터미널에서 실행할 때와 부팅 시에 차이가 발생할 여지가 있음. (가능성 살짝 높음)
소곤소곤
.
아래와 같이 스크립트 내용을 바꾸고 NAS를 껐다 켜봤지만 여전히 실행되지 않습니다.. ㅠㅠ
./S99tomcat.sh 로 실행하면 정상 실행은 되네요. 뭐가 문제일까요 ㅠㅠ
RackStation> cat S99tomcat.sh
#!/bin/sh
case "$1" in
start) #시작시 행동
echo -n "Starting tomcat: "
/volume1/@appstore/Tomcat7/src/bin/startup.sh
echo
;;
restart) #재시작시
sleep 1
$0 start
;;
*)
/bin/sh /volume1/@appstore/Tomcat7/src/bin/startup.sh
;;
esac
exit 0
어떻게든 되는 것은 없다.
아래 체크해보세요. 1. S99tomcat.sh 이
아래 체크해보세요.
1. S99tomcat.sh 이 부팅시 실행이 되긴하는지.
2. "*)" 구문으로 들어가는지.
3. 그리고 NAS 부팅 시에 /volume1/@appstore/Tomcat7/src/bin/ 경로가 존재하는지 확인. 추가로 startup.sh 이 실행 가능한 상태인지도 확인 (-x)
소곤소곤
.
1,2,3 체크 중에서 startup.sh가 실행 가능한 상태인것만 확인했습니다.
혹시 나머지는 어떻게 확인해야하는지 알려주시면 안될까요..? ㅠㅠ
어떻게든 되는 것은 없다.
S99tomcat.sh 파일 안에
/var/log/message 등에 로그 찍도록 설정 해 주고
부팅후 로그 파일을 열어서 그 로그가 제대로 찍혔는지 확인 해 보면
1번은 되겠네요
99번이면 거의 마지막에 실행하는거라
타 모듈등과의 디펜던시를 크게 타지 않을 것 같긴 한데
만약에 99번이 몇개 더 있다면
모듈의 로딩 순서 등에도 영향을 받을 수 있습니다.
그러면 번호를 바꿔 가면서 테스트 해 보는것도 하나의 방법입니다.
2번은.. 음 저도 어떻게 확인 해 볼 수 있는지 생각이 안나네요...
.
S99를 S12로 고쳤고 로그 통해 확인한 에러는 아래와 같습니다.
RackStation> cat /var/log/tomcat_log
Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
그래서 echo $JAVA_HOME 명령어로 해당 환경변수 위치를 확인했고 해당 내용을 코드에 추가하였습니다.
추가한 코드는 아래와 같습니다.
RackStation> cat /usr/syno/etc/rc.d/S12tomcat.sh
#!/bin/sh
JAVA_HOME="/var/packages/JavaManager/target/Java/jre"
case "$1" in
start) #시작시 행동
echo -n "Starting tomcat: "
/volume1/@appstore/Tomcat7/src/bin/startup.sh
echo
;;
restart) #재시작시
sleep 1
$0 start
;;
*)
/bin/sh /volume1/@appstore/Tomcat7/src/bin/startup.sh &> /var/log/tomcat_log
;;
esac
exit 0
이렇게 고치고 다시 실행했는데.. 여전히 같은 에러가 나네요.. ㅠㅠ
echo $JRE_HOME 했을 때는 아무 값도 안나왔습니다.
웃긴건.. 서버가 켜진 상태에서 /usr/syno/etc/rc.d 경로로 이동해서 ./S12tomcat.sh를 실행하면 아래와 같이 정상적으로 실행되는 로그가 나오네요;;
RackStation> ./S12tomcat.sh
RackStation> cat /var/log/tomcat_log
Using CATALINA_BASE: /volume1/@appstore/Tomcat7/src
Using CATALINA_HOME: /volume1/@appstore/Tomcat7/src
Using CATALINA_TMPDIR: /volume1/@appstore/Tomcat7/src/temp
Using JRE_HOME: /var/packages/JavaManager/target/Java/jre
Using CLASSPATH: /volume1/@appstore/Tomcat7/src/bin/bootstrap.jar:/volume1/@appstore/Tomcat7/src/bin/tomcat-juli.jar
Tomcat started.
뭐가 문제일까요..ㅠㅠ
어떻게든 되는 것은 없다.
변수가 전달되지 않는 문제는 export 되지
변수가 전달되지 않는 문제는 export 되지 않아서입니다.
앞에 export를 넣어보세요.
그리고 " 는 없어도 됩니다. (있어도 됩니다...)
JAVA_HOME이 맞는지 JRE_HOME이 맞는지는 다시 확인해보시고..
.
아 export 문제였습니다~
감사합니다! ^^
어떻게든 되는 것은 없다.
댓글 달기