首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Python 遠程統計伺服器檔案數量腳本(支援多進程)

     編輯:更多程式設計知識

需求場景

需定期統計多台 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。")

ip.csv 範例

192.168.1.10,password1,/var/log
192.168.1.11,password2,/data/files
192.168.1.12,password3,/home/user/docs

輸出 CSV 範例

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

關鍵技術點

  • Paramiko SSH:建立加密連線執行遠端指令。
  • multiprocessing.Pool:進程池平行處理多台主機,大幅縮短總耗時。
  • apply_async:非同步提交任務,主進程收集結果。
  • 錯誤處理:連線失敗、權限不足、路徑不存在皆回傳 failed 不中斷整體流程。

安全性建議

  1. 避免明文密碼寫在 CSV,改用 SSH 金鑰認證(ssh.connect(key_filename=...))。
  2. 限制 SSH 使用者權限,僅授予 ls 所需目錄讀取權限。
  3. 生產環境建議使用 Ansible、SaltStack 等自動化運維工具替代自製腳本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved