将一下3个脚本放到一个目录里,做成一个 python 的包即可使用


脚本介绍

操作服务脚本

#!/usr/bin/env python
# _*_coding:utf-8_*_
# Author: "Edward.Liu"
# Author-Email: lonnyliu@126.compile

"""
    process hanlde files incloud
        1.process status
            use request get Url returncode
        2.process Stop
            use psutil kill process
        3.process start
            use subprocess run shell start process
        4.process log
            use process logs
        5.process restart
"""

# Improt Libary
import psutil
from subprocess import PIPE, Popen, STDOUT
import os
import sys
import requests
import datetime

# Set vars
process_name = "/software/apache-tomcat-jenkins"
url = "http://172.31.1.230:8080"


def process_id():
    # use process name get process pid
    process_base_str = "-Dcatalina.base=%s" % process_name
    pid = {}
    for proc in psutil.process_iter():
        try:
            pinfo = proc.as_dict(attrs=['pid', 'name', 'cmdline'])
        except psutil.NoSuchProcess:
            pass
        else:
            if process_base_str in pinfo.get('cmdline'):
                pid[process_name] = pinfo.get('pid')
    return pid


def process_judgment():
    # 判断 URL 的状态码
    messages = ""
    try:
        jenkins_r = requests.get(url, timeout=None)
        return jenkins_r.status_code
    except requests.ConnectTimeout:
        messges = "Timeout"
        return messges
    except requests.ConnectionError:
        messages = "connection"
        return messages
    except requests.HTTPError:
        messages = "httperror"
        return messages
    else:
        return messages


def process_status():
    # judgment process status
    if not process_id().get(process_name) is None:
        if process_judgment() == 200:
            print "\033[32mProcess %s normal\033[0m" \
                % process_name.split('/')[2]
        else:
            print "\033[31mProcess Dont Access By:%s\033[0m" % url + "\n"\
                "\033[31mMesages:%s" % process_judgment()
    else:
        print "\033[31mProcess %s does not exist" % process_name.split('/')[2]


def process_log_info():
    process_log = "tail -f %s/logs/catalina.out " % process_name
    process_logs = Popen(process_log, shell=True,
                         stdout=PIPE, stderr=STDOUT)
    returncode = process_logs.poll()
    try:
        while returncode is None:
            line = process_logs.stdout.readline()
            returncode = process_logs.poll()
            line = line.strip()
            print line
        print returncode
    except KeyboardInterrupt:
        print 'ctrl+d or z'


def process_kill():
    # judgment process exist
    if process_id().get(process_name) is None:
        print "\033[31mProcess %s is Not Started" % process_name.split('/')[2]
        sys.exit(0)
    elif not process_id().get(process_name) is None \
            and process_judgment() != 200:
        print "\033[31mProcess %s is Started But Process access Failed \
            Messages:" % (process_name, process_judgment())
        sys.exit(0)
    # stop process
    PROCESSID = process_id().get(process_name)
    p = psutil.Process(pid=PROCESSID)
    p.kill()
    if process_id().get(process_name) is None:
        print "\033[32mprocess %s stop OK!!!\033[0m" \
            % process_name.split('/')[2]
    else:
        print "\033[31mProcess %s Stop Failed\!!![033[0m" \
            % process_name.split('/')[2]


def process_init():
    # start process
    os.environ["JAVA_HOME"] = "/software/java_1.7"
    start_time = datetime.datetime.now()
    process_init_command = "%s/bin/startup.sh" % process_name
    start = Popen(process_init_command, stdout=PIPE,
                  stderr=PIPE, shell=True)
    stdout, stderr = start.communicate()
    print stderr
    print "\033[32mWaitting Process %s Start OK !!!\033[0m" \
        % process_name.split('/')[2]
    while process_judgment() != 200:
        pass
    end_time = datetime.datetime.now()
    print "\033[32mprocess start time(s):%s\033[0m" \
        % (end_time - start_time).seconds
View Code

相关文章: