论坛首页 编程语言技术论坛

shell脚本控制jar的启动和停止

浏览 28596 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (6)
作者 正文
   发表时间:2012-03-31  
最好还是不要直接KILL-9 ,可以去试试KILL -15回调一个程序里的方法来手动停止各线程,这样会比较安全,而且防止数据丢失
0 请登录后投票
   发表时间:2012-03-31  
a_alter 写道
这样强行KILL 你不怕数据丢失么? 在主线程中写一个hook,开一个serversocket用于关闭。

   严重同意你的做法!
0 请登录后投票
   发表时间:2012-03-31  
在程序中中增加一个hook,jvm退出时会执行hook中的代码
Runtime.getRuntime().addShutdownHook(Thread);
kill -15 (SIGTERM)能够执行hook中代码
kill -9   (SIGKILL) 不能够执行hook中代码
0 请登录后投票
   发表时间:2012-03-31  
这样直接kill,内存数据不全丢了么?得先做判断吧
0 请登录后投票
   发表时间:2012-03-31  
建议启动的时候将shell脚本的PID记录到文件里面,然后关闭的时候就可以直接读文件获取PID,避免用ps查询了,有可能不准确的
0 请登录后投票
   发表时间:2012-04-01  
cnmcxiari 写道
最好还是不要直接KILL-9 ,可以去试试KILL -15回调一个程序里的方法来手动停止各线程,这样会比较安全,而且防止数据丢失

我也觉得直接kill -9这样太暴力了吧,最好是发送一个关闭命令之类的,这样可以做一些清理工作
0 请登录后投票
   发表时间:2012-04-02   最后修改:2012-04-02
楼主加上grep -v grep去掉grep进程就更好拉!!!
-9也最好去掉

#停止方法
stop(){
        ps -ef|grep test|grep -v grep|awk '{print $2}'|while read pid
        do
           kill $pid
        done
}
0 请登录后投票
   发表时间:2012-04-04  
你这应用能不能 实现类似 nginx 那样接收 信号量呢 是不是更好呢
0 请登录后投票
   发表时间:2012-04-04   最后修改:2012-04-05
呵呵呵,想起了一个以前写的shell脚本,启动和关闭线程(myshell.sh)。

CLASS_PATH=dayemail.jar
CLASS_PATH=$CLASS_PATH:lib/activation.jar
CLASS_PATH=$CLASS_PATH:lib/classes12.jar
CLASS_PATH=$CLASS_PATH:lib/c3p0-0.9.1.2.jar
CLASS_PATH=$CLASS_PATH:lib/commons-email-1.2.jar
CLASS_PATH=$CLASS_PATH:lib/dom4j-1.6.jar
CLASS_PATH=$CLASS_PATH:lib/jaxen-1.1.1.jar
CLASS_PATH=$CLASS_PATH:lib/jxl.jar
CLASS_PATH=$CLASS_PATH:lib/log4j-1.2.16.jar
CLASS_PATH=$CLASS_PATH:lib/mail.jar

SERVER=/qzpt/mydayemail
cd $SERVER   
  
case "$1" in   
  
  start)   
    nohup java -Dfile.encoding=UTF8 -Xms64M -Xmx256M -cp $CLASS_PATH com.trendsnet.myemail.EmailShell > $SERVER/server.log 2>&1 &   
    echo $! > $SERVER/server.pid   
    ;;   
  
  stop)   
    kill `cat $SERVER/server.pid`   
    rm -rf $SERVER/server.pid   
    ;;   
  
  restart)   
    $0 stop   
    sleep 1   
    $0 start   
    ;;   
  
  *)   
    echo "Usage: myshell.sh {start|stop|restart}"  
    ;;   
  
esac   
  
exit 0  


会自动生成server.pid记录当前线程的PID.
日志文件logger.info形式的日志记录进了Server.log ,当然也可以去掉写入Server.log改用自己的Log4j.

当然,程序里面做了钩子程序,用于关闭所有正在运行中的东东及保存临时文件。
0 请登录后投票
   发表时间:2012-04-06  
属于刚学shell几天的人拿来练手的shell
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics