Отключение оболочки после начала процесса с использованием сценария оболочки - PullRequest
3 голосов
/ 29 марта 2012

Я пытаюсь написать скрипт для запуска сервера tomcat, который отсоединяется от оболочки после завершения выполнения скрипта. Например, см. Снимок экрана ниже.

bash-3.00# ./startup.sh
Using CATALINA_BASE:   /opt/tomcat/6.0.32
Using CATALINA_HOME:   /opt/tomcat/6.0.32
Using CATALINA_TMPDIR: /opt/tomcat/6.0.32/temp
Using JRE_HOME:        /opt/jdk1.6.0_26/
Using CLASSPATH:       /opt/tomcat/6.0.32/bin/bootstrap.jar
bash-3.00# ps -eaf | grep tomcat
    root  4737  2945   0 02:45:53 pts/24      0:00 grep tomcat
    root  4734 29777   1 02:45:42 pts/24      0:19 /opt/jdk1.6.0_26//bin/java -Djava.util.logging.config.file=/opt/tomcat/6.0.32/c

Теперь, как вы видите, после выполнения скрипта процесс tomcat связывается с pts / 24, пока я не закрою оболочку. Но я хочу, чтобы, даже если оболочка оставалась открытой, процесс должен показывать поведение, подобное приведенному ниже

bash-3.00# ps -eaf | grep tomcat
    root 13985  2945   0 22:40:13 pts/24      0:00 grep tomcat
    root 13977 29777   1 22:40:01 ?           0:22 /opt/jdk1.6.0_26//bin/java -Djava.util.logging.config.file=/opt/tomcat/6.0.32//

Операционная система - Solaris. Различные варианты, которые я использовал для достижения того же, используют nohup и disown, но процесс все еще связан с shell.

Другим механизмом является установка crontab или использование svc для запуска процесса при запуске системы, то есть демона, или мы можем написать небольшую C-программу, которая разветвляется и удаляется.

Здесь обратите внимание, что процесс выполняется в фоновом режиме.

Но я хочу добиться того же, используя скрипт на shell или perl. Поэтому любая мысль о том же мне очень поможет.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2012
( nohup ./script.bash & )

Оболочка в скобках выходит сразу, а ps -ef |grep script.bash возвращает:

501 59614     1   0   0:00.00 ttys005    0:00.00 /bin/bash ./script.bash
2 голосов
/ 29 марта 2012

Ну, вы могли бы пойти и сделать всю тяжелую работу самостоятельно, но почему, когда есть модуль для этого: Proc :: Daemon (Не уверен, работает ли он на солярисе)

В документации также описывается используемый процесс, который, в любом случае, полезно для вас понять, если вы решили пойти дальше и создать свой собственный демонизирующий код.

...