JAVA自启服务

JAVA自启服务

根据python文件创建系统服务

1 创建Python文件
[root@node1 ~]# vim python.py
#coding:utf-8
#author:userfan
#date:2020-5-26


import os
import sys
import subprocess

class JavaSystemServices(object):
    def __init__(self, params):
        self.__dict__.update(params) if params else None
        self.config = dict(self.__dict__)
        self.system_service_path = "/usr/lib/systemd/system"

        if self.config and len(self.config) is 5:
            self.service_name = self.config.get("service_name", "")
            self.platform_name = self.config.get("platform_name", "")
            self.sh_path = self.config.get("sh_path", "")
            self.java_path = self.config.get("java_path", "")
            self.java_run_command = self.config.get("java_run_command", "")
        else:
            sys.exit("not args or not enough kwargs")

    def service_pre_start(self):
        command = "systemctl start {}.service".format(self.service_name)
        try:
            subprocess.check_call(command, shell=True)
            status = True
        except Exception:
            status = False
        return status

    def run(self):
        if self.service_pre_start():
            print "{}启动成功".format(self.service_name)
        else:
            try:
                self.create_service()
                self.create_sh()
                os.system("systemctl daemon-reload")
                os.system("systemctl enable {}.service".format(self.service_name))
                print "{} 服务创建成功,请测试!!!".format(self.service_name)
            except Exception as e:
                print e

    def create_service(self):

        full_path = os.path.join(self.system_service_path, "{}.service".format(self.service_name))
        # 利用
        with open(full_path, 'w') as f:
            f.write("#!/bin/sh\n\n")
            f.write("[Unit]\n")
            f.write("Description={}-service {}\n".format(self.platform_name, self.service_name))
            f.write("After=syslog.target network.target remote-fs.target nss-lookup.target\n\n")
            f.write("[Service]\n")
            f.write("Type=forking\n")
            f.write("ExecStart={}/{}-service/{}/{}-start.sh\n".format(self.sh_path, self.platform_name, self.service_name,self.service_name))
            f.write("ExecStop={}/{}-service/{}/{}-stop.sh\n".format(self.sh_path, self.platform_name, self.service_name,self.service_name))
            f.write("PrivateTmp=true\n\n")
            f.write("[Install]\n")
            f.write("WantedBy=multi-user.target")

    def create_sh(self):
        if not os.path.exists(self.sh_path):
            os.makedirs(self.sh_path)
        sh_full_path = os.path.join(self.sh_path, "{}-service".format(self.platform_name), self.service_name)
        if not os.path.exists(sh_full_path):
            os.chdir(self.sh_path)
            os.makedirs("{}/{}-service/{}".format(self.sh_path,self.platform_name,self.service_name))

        start_sh_path = os.path.join(sh_full_path, "{}-start.sh".format(self.service_name))
        stop_sh_path = os.path.join(sh_full_path, "{}-stop.sh".format(self.service_name))
        service_pid_path = os.path.join(sh_full_path, "{}-service.pid".format(self.service_name))
        with open(start_sh_path, "w") as f:
            f.write("#!/bin/sh\n\n")
            f.write("export JAVA_HOME={}\n".format(self.java_path))
            f.write("export PATH=$JAVA_HOME/bin:$PATH\n\n")
            f.write(self.java_run_command + "\n")

        with open(stop_sh_path, "w") as f:
            f.write("#!/bin/sh\n\n")
            f.write("PID=$(cat {})\n".format(service_pid_path))
            f.write("kill -9 $PID")

        with open(service_pid_path,"w") as f:
            pass

        os.system("chmod +x {}".format(start_sh_path))
        os.system("chmod +x {}".format(stop_sh_path))

def yilian_main(java_path):
    java_services_info = [
        {
            # 服务名称
            "service_name": "register",
            # 平台名称
            "platform_name": "yilian",
            # 创建脚本的文件夹
            "sh_path": "/development/kg",
            # jdk的文件夹目录
            "java_path": java_path,
            # 启动JAVA的命令
            "java_run_command": "nohup java -jar renren-register.jar >register.log &"
        },
        {
            "service_name": "monitor",
            "platform_name": "yilian",
            "sh_path": "/development/kg",
            "java_path": java_path,
            "java_run_command": "nohup java -jar renren-monitor.jar >monitor.log &"
        },
        {

            "service_name": "auth",
            "platform_name": "yilian",
            "sh_path": "/development/kg",
            "java_path": java_path,
            "java_run_command": "nohup java -jar renren-auth.jar >auth.log &"
        },
        {

            "service_name": "admin",
            "platform_name": "yilian",
            "sh_path": "/development/kg",
            "java_path": java_path,
            "java_run_command": "nohup java -jar renren-admin-server.jar >admin.log &"
        },
        {
            "service_name": "gateway",
            "platform_name": "yilian",
            "sh_path": "/development/kg",
            "java_path": java_path,
            "nohup java -jar renren-gateway.jar >gateway.log &"
        }
        
    ]
    return java_services_info

if __name__ == '__main__':
    sh_path = "/development/kg"
    test_server8_java_path = "/usr/local/jdk"
    # 172.16.16.8测试服务器 java 安装环境

    for item in yilian_main(guowang_test_java_path):
        jss = JavaSystemServices(item)
        jss.run()


2 执行Python文件
[root@node1 ~]# python python.py
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值