(해결) 시놀로지 NAS 시작할 때 원하는 프로그램을 실행할 수 있도록 하는 스크립트를 짜려고 합니다.

misohouse의 이미지

톰캣 서버 실행 파일 (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) /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" 와 같이 변경
- 권한 문제든 뭐든 터미널에서 실행할 때와 부팅 시에 차이가 발생할 여지가 있음. (가능성 살짝 높음)


소곤소곤

misohouse의 이미지

아래와 같이 스크립트 내용을 바꾸고 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 이 부팅시 실행이 되긴하는지.
2. "*)" 구문으로 들어가는지.
3. 그리고 NAS 부팅 시에 /volume1/@appstore/Tomcat7/src/bin/ 경로가 존재하는지 확인. 추가로 startup.sh 이 실행 가능한 상태인지도 확인 (-x)


소곤소곤

misohouse의 이미지

1,2,3 체크 중에서 startup.sh가 실행 가능한 상태인것만 확인했습니다.

혹시 나머지는 어떻게 확인해야하는지 알려주시면 안될까요..? ㅠㅠ

어떻게든 되는 것은 없다.

akayong의 이미지

/var/log/message 등에 로그 찍도록 설정 해 주고
부팅후 로그 파일을 열어서 그 로그가 제대로 찍혔는지 확인 해 보면
1번은 되겠네요

99번이면 거의 마지막에 실행하는거라
타 모듈등과의 디펜던시를 크게 타지 않을 것 같긴 한데

만약에 99번이 몇개 더 있다면
모듈의 로딩 순서 등에도 영향을 받을 수 있습니다.

그러면 번호를 바꿔 가면서 테스트 해 보는것도 하나의 방법입니다.

2번은.. 음 저도 어떻게 확인 해 볼 수 있는지 생각이 안나네요...

misohouse의 이미지

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.

뭐가 문제일까요..ㅠㅠ

어떻게든 되는 것은 없다.

qiiiiiiiip의 이미지

변수가 전달되지 않는 문제는 export 되지 않아서입니다.

앞에 export를 넣어보세요.
그리고 " 는 없어도 됩니다. (있어도 됩니다...)
JAVA_HOME이 맞는지 JRE_HOME이 맞는지는 다시 확인해보시고..

export JAVA_HOME=/var/packages/JavaManager/target/Java/jre
misohouse의 이미지

아 export 문제였습니다~

감사합니다! ^^

어떻게든 되는 것은 없다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.