zoukankan      html  css  js  c++  java
  • paip.注册java程序为LINUX系统服务的总结。


    paip.注册java程序为LINUX系统服务的总结。

    实现开机启动。
    标准方法是按照/etc/init.d/下面的文件,修改一下;然后chkconfig xxx on 即可。比较麻烦。。放弃..
    可以简单实现开机自启动就是了。。
    2.在/etc/rc.local里面写
    /bin/bash  /xxxx.sh
     
    编写服务脚本。运行。。locationServc.sh start/stop/restart/?
    运行sh,提示权限不不够,winwcp>>proerty>>auth所有的打钩..
    运行在, /bin/bash^M: bad interpreter:...原因:window,linux行结尾格式不一样,notepad++ >>edit>doc format convert>>convert to unix format..

     
    //服务的关闭 locationServc.sh stop 实现原理。
    程序启动的时候儿,打开一个端口,关闭的时候儿ps | grep port | grep progrmName | grep java | kill

    作者Attilax  艾龙, EMAIL:1466519819@qq.com
    来源:attilax的专栏
    地址:http://blog.csdn.net/attilax

    ------------------------------打开端口
    core.openPort(port);
    public static void openPort(final int port) {
            god.newThread(new Runnable() {

                @Override
                public void run() {
                    server( port);

                }
            }, "open port thrd");

        }

        // 服务端Socket
        public static void server(int port) {
            try {
                ServerSocket ss = new ServerSocket(port);
                // accept接受连接请求,接受到请求返回一个Socket套接字
                Socket s = ss.accept();
                OutputStream os = s.getOutputStream(); // 创建socket输出流
                InputStream is = s.getInputStream(); // 创建socket输入流
                os.write("The information comes from server!".getBytes());// 将字符串转为字节
                byte[] buf = new byte[100];

                while (true) {
                    int len = is.read(buf);
                    System.out.println(new String(buf, 0, len)); // 将字节数组转为字符串
                    core.sleep(1000);
                }
                // os.close();
                // is.close();
                // s.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    -----------------查看此端口程序command
    ps aux| grep 9999 | grep com.xxx.linuxServiceTest |grep java


    /通过端口杀死进程 (取的pid,kill)
    netstat -nlp | grep :9999 | awk '{print $7}' | awk -F"/" '{ print $1 }'

    “xargs kill -s 9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -s 9”命令的参数,并执行该命令。“kill -s 9”会强行杀掉指定进程。
      netstat -nlp | grep :9999 | awk '{print $7}' | awk -F"/" '{ print $1 }' | xargs  kill
     
     
     需要用到"[']"操作符,它可以执行一个语句,这个可以如此执行:这个不行..
    kill [']netstat -nlp | grep :3306 | awk '{print $7}' | awk -F"/" '{ print $1 }'[']
     使用' kill 'xxxx'  也不行...子能xargs..

     
     
    -----------------最终编写的服务脚本


    #!/bin/bash
    # /etc/rc.d/init.d/locationServc.sh

    JAVA_HOME=/usr/java/jdk1.6.0_21
    JAVA_BIN=/usr/java/jdk1.6.0_21/bin
    PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME JAVA_BIN PATH CLASSPATH

    CATALINA_HOME=/home/focustar/apache-tomcat-6.0.37
    export  CATALINA_HOME

    #o313 -----------------
    apphome=/imServer
    export  apphome
    CLASSPATH=$CLASSPATH:$apphome/WebRoot/WEB-INF/classes
    export   CLASSPATH
    jardirs=$apphome/lib
    export   jardirs
    ERP_PORT=10999
    #o313 end---------------------------

    start()
    {
      echo "Starting locationServc..."
      #rem不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中

      java   -Djava.ext.dirs=$jardirs -classpath  $CLASSPATH com.attilax.util.linuxServiceTest 9999
      echo "Starting ok!!!"
    }
     #pkill locationServc.sh
    stop()
    {
            echo "Stopping locationServc..."        
              netstat -nlp | grep :9999 | awk '{print $7}' | awk -F"/" '{ print $1 }' | xargs  kill
               echo "Stopping locationServc ok!!!"
              

    }
    testx()
    {
      echo "testxx echo"
    }

    case "$1" in
    start)
            #invoke function start()
             start
             ;;
               #case的格式要求,lyag lyedin comma  
    stop)
             stop
           ;;
    test)  
            echo "test echo...";
            testx
            ;;
    restart)     
             stop   
            sleep  3;  
           start
             ;;
    ?)
            echo "Usage locationServc.sh start/stop/restart"
            exit 1
            ;;
    *)
            start
            ;;
     
    esac


    #"C:\jre\bin\java.exe"   -Dfile.encoding=UTF-8  -Djava.ext.dirs="C:\jar;c:\jar1;%~dp0\lib" -classpath ".;.\classes;%~dp0\classes" homi.convert2atian f:\Contact_QQPhoneManager(2013-12-03).csv  gbk f:\Contact_QQPhoneManager(2013-12-03)_atian333_a.csv c:\deeng\hezi_deeng_deduli.txt


     
    参考
    注册程序为LINUX系统服务并设置成自启动的方法 - Linux操作系统:Ubuntu_Centos_Debian - 红黑联盟.htm
    Linux下通过端口杀死进程 - 站在高处眺望 - 博客园.htm
    Linux Shell编程case语句 - 非淡泊无以明志,非宁静无以致远 - 博客频道 - CSDN.NET.htm

  • 相关阅读:
    Set,List,Map,Vector,ArrayList的区别
    关于List,Set,Map能否存储null
    JAVA集合 DelayQueue 的使用 (同步的超时队列)
    FluentScheduler .Net 定时Job
    BeanFactory和FactoryBean
    ansj 分词,超过了标准的 IK 分词.
    Python字典、集合结构详解
    Python列表、元组结构详解
    C语言--结构体&文件
    C语言--指针
  • 原文地址:https://www.cnblogs.com/attilax/p/15199297.html
Copyright © 2011-2022 走看看