Chinaunix
标题:
ant执行daemon程序
[打印本页]
作者:
jhsea3do
时间:
2006-08-25 12:59
标题:
ant执行daemon程序
写了一个application,用ant脚本启动,因为是守护进程。
就用
[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中的内容
$ANT -f $CONFIG_FILE start
复制代码
改为
/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写的我没看明白
你的意思是
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
#!/bin/bash
# script: binduser-daemon
# author: jhsea3do
# create: 2006-03-20
umask 002
export LANG=zh_CN
export LC_ALL=zh_CN.GBK
CONF_HOME=/home2/jhsea3do
EXEC_FOLD=/var/daemon/out
source ${CONF_HOME}/.bashrc.java.env
JAVA=${JAVA_HOME}/bin/java
ANT=${ANT_HOME}/bin/ant
cd ${EXEC_FOLD}
echo //--------------------------------------------------\\\\
echo +----------------------------------------------------+
echo EXEC_FOLD=`pwd`
echo +----------------------------------------------------+
echo CONF_HOME=${CONF_HOME}
echo +----------------------------------------------------+
echo JAVA_HOME=${JAVA_HOME}
echo +----------------------------------------------------+
echo ANT_HOME=${ANT_HOME}
echo +----------------------------------------------------+
${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
<!-- ================================================================= -->
<!-- execute binduser-daemon -->
<!-- ================================================================= -->
<target name="binduser-daemon" depends=""
description="execute binduser-daemon">
<tstamp/>
<echo message="start binduser-daemon..." level="info" />
<java classname="com.javaws.daemons.BindUser" fork="true">
<classpath>
<path refid="javaws.config" />
<pathelement location="${javaws.jar}"/>
<path refid="hibernate.classpath" />
</classpath>
</java>
<echo message="shutdown binduser-daemon..." level="info" />
</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