• 通过python启动java程序,挺方便的分享下。


    最近部署了java程序,刚开始用shell来启动,启动过程不友好也不方便,也没有守护进程。今年在整理资料的时候,发现了珍藏一套启动脚本。

    挺方便的。记录下。以免忘记

    这是我的java程序结构

    一个jar文件,一个config配置文件 一个lib依赖包。

    重点贴出 appStoreServer.py脚本代码

    #!/usr/bin/python
    import os, sys, time, commands
    
    _program = 'appStoreServer.jar'
    _daemon = 'appStoreServer.py'
    
    def getProgramPid():
        result = commands.getoutput("ps aux | grep java \
            | grep %s | grep -v grep | awk '{print $2}'" % _program)
        return result
    
    def getDaemonPid():
        result = commands.getoutput("ps aux | grep python \
            | grep '%s monitor' | grep -v grep | awk '{print $2}'" % _daemon)
        return result
    
    def startProgram():
        p_pid = getProgramPid()
        if p_pid != '':
            print('It seems this program is already running...')
        else:
            print('Starting program...')
            if os.system('nohup java -Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -Xmn256m \
    		-cp %s:config/:lib/* com.xxxx.Bootstrap >> log/stdio.log 2>&1 &' % _program) == 0:
                print('start program successfully and pid is ' + getProgramPid())
    
    def startDaemon():
        d_pid = getDaemonPid()
        if d_pid != '':
            print('It seems this daemon is already running...')
        else:
            print('Starting daemon...')
            if os.system('nohup python %s monitor >> log/daemon.log 2>&1 &' % _daemon) == 0:
                print('start daemon successfully and pid is ' + getDaemonPid())
    
    def stopProgram():
        p_pid = getProgramPid()
        if p_pid == '':
            print('It seems this program is not running...')
        else:
            os.system('kill ' + p_pid)
            print('program stopped')
    
    def stopDaemon():
        d_pid = getDaemonPid()
        if d_pid == '':
            print('It seems daemon is not running...')
        else:
            os.system('kill ' + d_pid)
            print('daemon stopped')
    
    def monitor():
        while 1:
            time.sleep(10)
            p_pid = getProgramPid()
            if p_pid == '':
                print('It seems this program is not running. Start it now!')
                startProgram()
    
    if __name__ == '__main__':
        if(len(sys.argv) == 2):
            args = sys.argv[1]
        else:
            args = raw_input('Enter args: ')
        
        logPath = os.path.curdir + os.sep + 'log'
        if not os.path.exists(logPath):
            os.mkdir(logPath)
    
        if args == 'start':
            startProgram()       
            startDaemon()
        elif args == 'stop':
            stopDaemon()
            stopProgram()
        elif args == 'restart':
            stopDaemon()
            stopProgram()
            time.sleep(3)
            startProgram()       
            startDaemon()
        elif args == 'monitor':
            monitor()
        else:
            print('nothing to do')  
    

      只需要修改你的jar 和main class 入口(这就是文中 com.xxx.bootstrap部分)。python调用了nuhop命令,退出终端也可以后台运行,挺方便的,重点的是还有daemo进程

    修改了,开始启动 java程序

    关闭

  • 相关阅读:
    keepalived 打印日志
    mysql 主从切换
    mysql 开启只读 普通用户无法写入
    主从复制同步mysql数据库后会导致从上用户无法登陆
    MySQL性能优化的最佳20+条经验(1)
    MySQL性能测试工具之mysqlslap
    关于ad所用端口
    mysql 从设置只读
    ARP表信息引起的telnet 时断时通
    Caused by: java.sql.SQLException: ResultSet is from UPDATE. No Data.
  • 原文地址:https://www.cnblogs.com/montya/p/python.html
Copyright © 2020-2023  润新知