Chinaunix

标题: ant执行daemon程序 [打印本页]

作者: jhsea3do    时间: 2006-08-25 12:59
标题: ant执行daemon程序
写了一个application,用ant脚本启动,因为是守护进程。

就用
  1. [user@myhost /opt/myapp]$ ~/bin/bash_script_file >>/tmp/script.log 2>&1 &
复制代码
的命令执行。


结果发现,每次exit这个user所在的shell,该ant进程就会结束,并不是真正的守护进程



而tomcat的developer版本就可以,是不是因为tomcat使用了jmx的关系啊?


我怎么解决这个问题。

[ 本帖最后由 jhsea3do 于 2006-8-25 13:00 编辑 ]
作者: itlaomao    时间: 2006-08-25 21:33
让我来猜猜,你的bash_script_file的第一行是不是少了下面这一句:

#!/bin/bash
作者: jhsea3do    时间: 2006-08-26 12:29
没有啊

另外,我尝试把bash_script_file中的内容

  1. $ANT -f $CONFIG_FILE start
复制代码


改为

  1. /bin/bash -c $ANT -f $CONFIG_FILE start
复制代码


都不行
作者: itlaomao    时间: 2006-08-26 22:16
问题出在ant这个script里,your ant exits before your script ends when you exit shell。

你可以把ant,复制到你的script 里在改改试试。

如果能解决的话,请回一贴,谢谢。
作者: jhsea3do    时间: 2006-08-28 14:55
ls写的我没看明白

你的意思是

  1. cat `$ANT_HOME/bin/ant` > bash_script_file
复制代码


然后加上bash_script_file的其他内容么?

我已经试着用bg, fg, jobs的办法来解决这个问题,但还是不行。

我很奇怪我用ant部署tomcat就可以退出shell,而自己写的就不行。
作者: tinywind    时间: 2006-08-28 15:29
用nohup启动你的脚本
nohup your_shell &
作者: jhsea3do    时间: 2006-08-28 15:37
谢谢楼上的,试了,nohup无效
作者: tinywind    时间: 2006-08-28 15:50
贴出你的脚本看看
作者: jhsea3do    时间: 2006-08-28 16:01


  1. #!/bin/bash

  2. # script: binduser-daemon
  3. # author: jhsea3do
  4. # create: 2006-03-20

  5. umask 002
  6. export LANG=zh_CN
  7. export LC_ALL=zh_CN.GBK

  8. CONF_HOME=/home2/jhsea3do
  9. EXEC_FOLD=/var/daemon/out
  10. source ${CONF_HOME}/.bashrc.java.env

  11. JAVA=${JAVA_HOME}/bin/java
  12. ANT=${ANT_HOME}/bin/ant

  13. cd ${EXEC_FOLD}
  14. echo //--------------------------------------------------\\\\
  15. echo +----------------------------------------------------+
  16. echo  EXEC_FOLD=`pwd`
  17. echo +----------------------------------------------------+
  18. echo  CONF_HOME=${CONF_HOME}
  19. echo +----------------------------------------------------+
  20. echo  JAVA_HOME=${JAVA_HOME}
  21. echo +----------------------------------------------------+
  22. echo  ANT_HOME=${ANT_HOME}
  23. echo +----------------------------------------------------+
  24. ${ANT} -f ${CONF_HOME}/etc/binduser-daemon-config.xml binduser-daemon
复制代码


/usr/bin/nohup ~jhsea3do/bin/binduser-daemon >>/var/log/binduser-daemon.log 2>&1 &
作者: jhsea3do    时间: 2006-08-28 16:08

  1.   <!-- ================================================================= -->
  2.   <!-- execute binduser-daemon                                       -->
  3.   <!-- ================================================================= -->
  4.   <target name="binduser-daemon" depends=""
  5.           description="execute binduser-daemon">
  6.     <tstamp/>
  7.     <echo message="start binduser-daemon..." level="info" />
  8.     <java classname="com.javaws.daemons.BindUser" fork="true">
  9.       <classpath>
  10.         <path refid="javaws.config" />
  11.         <pathelement location="${javaws.jar}"/>
  12.         <path refid="hibernate.classpath" />
  13.       </classpath>
  14.     </java>
  15.     <echo message="shutdown binduser-daemon..." level="info" />
  16.   </target>
复制代码

作者: itlaomao    时间: 2006-08-28 22:24
看看这个对你有没有启发。我曾经碰到过一个问题,当在一个脚本如果想执行ant两次的话,第二次是永远执行不到的。第一个ant结束之后,脚本就退出,不管你后面还有多少指令,都没用。

建议:
cat `$ANT_HOME/bin/ant` >> bash_script_file
然后写改bash_script_file,去掉那句:$ANT -f $CONFIG_FILE start
这样就相当于你用 ANT 了。
作者: jhsea3do    时间: 2006-08-29 10:03
itlaomo的方法不行的。

我在java标签中加入了spawn的属性为true,可以达到我的要求。

现在研究如何杀死spawn产生的进程,我开一个ant任务会起n个java进程,都要kill -s 9才能杀
作者: jhsea3do    时间: 2006-08-29 10:27
用spawn的缺点是不能用fg命令把这些个jobs调出来。

http://marc.theaimsgroup.com/?l= ... 61183027726&w=2

05年有人问过,似乎没解决
作者: itlaomao    时间: 2006-08-31 00:34
最后的办法是版 ant 得源码调出来,修改一下,工程略大。。。
作者: jhsea3do    时间: 2006-08-31 11:05
其实手工杀进程的方式在那些mail-list上都是不推荐的,他们都建议这种类型的程序用RMI来做。

我其实是偷懒,如果改ant源码估计我还没那个能力。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2