环境:Python3.6.5 Pycharm
备注:python连接远程机,需要借助paramiko库,因此此脚本主要为paramiko的使用
#!/usr/bin/env python
//定义这是一个python脚本
#coding:utf8
//定义编码方式
import paramiko
//导入paramiko库
ssh = paramiko.SSHClient()
//定义ssh为SSH的客户端
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='IP地址', port='端口号', username='用户名', password='用户名密码')
stdin, stdout, stderr = ssh.exec_command("要执行的linux命令")
print(stdout.read())
//打印输出的结果
ssh.close()
//关闭连接
需要注意的是,执行linux命令时,单条与多条的使用方法不一致
stdin, stdout, stderr = ssh.exec_command("要执行的linux命令") -------单条
stdin, stdout, stderr = ssh.exec_command("多条Linux命令,每条命令直接用;分隔",get_pty=False)-----多条
而常使用的Linux命令如下:
1、ps -ef | grep 服务 | grep -v grep | awk '{print $2}'|xargs kill -9
//找到要重启的服务并kill掉之前的进程
2、cd /root/env/tomcat-biz/bin;./startup.sh
//tomcat的启动方式
3、nohup java -jar jar包名.jar >run.log 2>&1 &
//jar包的启动方式
使用中遇到的问题:
1、nohup无法调起jar包
解决方式:使用nohup命令前,重启一下配置文件. /etc/profile
2、脚本运行完成后,部分模块报错
解决方式:部分服务需要优先启动,因此启动后,需要sleep一段时间,因此需要导入time模块
完整代码如下:
#!/usr/bin/env python
#coding:utf8
import paramiko
import time
def redis():
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='IP地址', port='端口号', username='用户名', password='用户密码')
stdin, stdout, stderr = ssh.exec_command("多条linux命令",get_pty=False)
print('redis:', stdout.read())
ssh.close()
time.sleep(30)
//redis启动,zookeeper和cache相同
def priority():
需要优先启动的模块,内部逻辑如上
time.sleep(10)
def dubbo():
dubbo各模块启动,内部逻辑如上
time.sleep(30)
def gateway():
网关重启(一般为最后一步,内部逻辑如上)
if __name__ == '__main__':
redis()
zookeeper()
cache()
priority()
dubbo()
gateway()
print('环境启动完成')
//主函数,启动完成后告知“环境启动完成”