一旦进程开始使用shell脚本,就会抛出shell

时间:2012-03-29 08:46:07

标签: perl bash shell solaris

我正在尝试编写一个脚本来启动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脚本实现相同的功能。所以任何想法都会对我有所帮助。

提前致谢。

2 个答案:

答案 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