【发布时间】:2012-04-12 21:33:03
【问题描述】:
我正在尝试编写一个用于启动 tomcat 服务器的脚本,一旦脚本执行完成,该脚本就会与 shell 解除关联。例如,请看下面的屏幕截图。
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 相关联,直到我关闭 shell。 但我想要的是,即使外壳保持打开状态,进程也应该显示如下行为
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 脚本来实现相同的目的。所以任何关于相同的想法都会对我有很大帮助。
提前致谢。
【问题讨论】:
-
你试过 nohup 和 & 的组合吗?
-
是的,我仍然得到与 shell 相关的进程。基本上我做了如下 bash-3.00# nohup ./startup.sh & 但它仍然与 shell 相关联。
-
我们没有使用 Solaris,而是使用 Java Service Wrapper '包装'Tomcat,我们展示了您在 Linux 下寻找的行为。