需定期統計多台 Linux 伺服器特定目錄下的檔案總數,並記錄耗時,結果輸出 CSV 供稽核。
#!/usr/bin/python
# encoding=utf-8
import time, os, paramiko, multiprocessing
def get_total(ip, password, filepath):
paramiko.util.log_to_file('paramiko.log')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
start = time.time()
ssh.connect(hostname=ip, port=22, username='root', password=password)
stdin, stdout, stderr = ssh.exec_command(f'cd {filepath} ; ls | wc -l')
count = int(stdout.read().strip())
elapsed = time.time() - start
return f"{ip},{filepath},{count},{elapsed:.2f}\n"
except Exception as e:
return f"{ip},{filepath},failed\n"
if __name__ == '__main__':
# 讀取 ip.csv:每行格式 ip,password,path
iplist = open('ip.csv').readlines()
results = ['IP,FILEPATH,COUNT,TIMECOST\n']
pool = multiprocessing.Pool(processes=6)
for line in iplist:
ip, pwd, path = line.strip().split(',')
pool.apply_async(results.append, (get_total(ip, pwd, path),))
pool.close()
pool.join()
timestamp = time.strftime('%Y%m%d%H%M%S')
with open(f'tongji_log_{timestamp}.csv', 'w') as fp:
fp.writelines(results)
print("統計完成,結果已寫入 CSV。")
192.168.1.10,password1,/var/log
192.168.1.11,password2,/data/files
192.168.1.12,password3,/home/user/docs
IP,FILEPATH,COUNT,TIMECOST
192.168.1.10,/var/log,1234,0.45
192.168.1.11,/data/files,5678,1.23
192.168.1.12,/home/user/docs,failed
failed 不中斷整體流程。ssh.connect(key_filename=...))。ls 所需目錄讀取權限。