我正在尝试编写一个脚本来启动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。 但我想要的是,即使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脚本实现相同的功能。所以任何想法都会对我有所帮助。
提前致谢。
答案 0 :(得分:2)
嗯,你可以自己去做所有艰苦的工作,但为什么当有一个模块时:Proc::Daemon(不确定它是否适用于solaris)
该文档还描述了所使用的过程,如果您决定继续制作自己的守护程序代码,这对您无论如何都是有用的。
答案 1 :(得分:2)
( nohup ./script.bash & )
带括号的子shell立即退出,ps -ef |grep script.bash
返回:
501 59614 1 0 0:00.00 ttys005 0:00.00 /bin/bash ./script.bash