下面就是详细讲解「Python查看多台服务器进程的脚本分享」的完整攻略。
Python查看多台服务器进程的脚本分享
背景描述
对于运维人员来说,查看多台服务器上的进程状态是必要的工作之一,手动登录各个服务器进行查看是费时费力的。使用Python编写一个脚本可以大大提高效率。本文分享如何使用Python脚本查看多台服务器进程状态。
环境准备
我们需要在本地电脑上运行一个Python环境,并在代码中使用paramiko库。paramiko库是Python的一个SSH包,主要用于远程连接Linux/Unix服务器进行操作。
步骤
1. 安装paramiko库
使用pip命令安装paramiko库:
pip install paramiko
2. 编写Python脚本
我们来编写一个Python脚本,实现查看多台服务器上的进程状态。
import paramiko
servers = ['192.168.1.1', '192.168.1.2'] #服务器IP列表
username = 'root' #SSH用户名
password = 'password' #SSH密码
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for server in servers:
client.connect(server, username=username, password=password)
stdin, stdout, stderr = client.exec_command('ps aux')
print(f"===进程状态({server})===")
print(stdout.read().decode())
client.close()
这个脚本会依次连接服务器列表中的每一台服务器,执行"ps aux"命令,打印出进程状态。
示例说明
我们来模拟一个服务器列表,包含两台服务器:
servers = ['192.168.1.1', '192.168.1.2']
执行脚本后,输出如下:
===进程状态(192.168.1.1)===
root 1 0.0 0.0 18024 1080 ? Ss Jun17 0:21 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun17 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Jun17 0:00 [rcu_gp]
...
===进程状态(192.168.1.2)===
root 1 0.0 0.0 23712 1132 ? Ss Jun17 1:06 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun17 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< Jun17 0:00 [rcu_gp]
...
可以看到,脚本成功连接了两台服务器,并输出了进程状态。
3. 扩展功能
在实际应用中,我们可能需要查看特定进程的状态。可以根据进程名字来过滤:
import paramiko
servers = ['192.168.1.1', '192.168.1.2'] #服务器IP列表
username = 'root' #SSH用户名
password = 'password' #SSH密码
process_name = 'nginx' #进程名称
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for server in servers:
client.connect(server, username=username, password=password)
stdin, stdout, stderr = client.exec_command(f"ps aux | grep {process_name}")
print(f"===进程状态({server})===")
print(stdout.read().decode())
client.close()
这个脚本会查找"nginx"进程,并输出进程状态。
常见问题
1. 如何将结果保存到文件中?
可以将print改为写入文件的操作:
import paramiko
servers = ['192.168.1.1', '192.168.1.2'] #服务器IP列表
username = 'root' #SSH用户名
password = 'password' #SSH密码
process_name = 'nginx' #进程名称
output_file = 'result.txt'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
with open(output_file, 'w') as f:
for server in servers:
client.connect(server, username=username, password=password)
stdin, stdout, stderr = client.exec_command(f"ps aux | grep {process_name}")
f.write(f"===进程状态({server})===\n")
f.write(stdout.read().decode() + '\n')
client.close()
这个脚本会将结果写入到result.txt文件中。
2. 如何处理异常情况?
使用try except捕获异常,避免因为连接或执行命令失败而终止脚本:
import paramiko
servers = ['192.168.1.1', '192.168.1.2'] #服务器IP列表
username = 'root' #SSH用户名
password = 'password' #SSH密码
process_name = 'nginx' #进程名称
output_file = 'result.txt'
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
with open(output_file, 'w') as f:
for server in servers:
try:
client.connect(server, username=username, password=password)
stdin, stdout, stderr = client.exec_command(f"ps aux | grep {process_name}")
f.write(f"===进程状态({server})===\n")
f.write(stdout.read().decode() + '\n')
except:
f.write(f"===连接({server})失败===\n")
finally:
client.close()
这个脚本会将连接或执行命令出现异常的服务器输出到result.txt文件中,并继续执行下一台服务器的操作。
结语
使用Python脚本查看多台服务器进程状态可以大大提高工作效率,同时也避免了手动登录各个服务器的繁琐操作。希望本文可以对读者有所帮助,谢谢阅读!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python查看多台服务器进程的脚本分享 - Python技术站