首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

GNU Parallel 實戰:批量管理 Cron、SCP 與標籤輸出

     編輯:Java 綜合教學

GNU Parallel 實戰:批量管理 Cron、SCP 與標籤輸出

GNU Parallel 是一個強大的命令列工具,可並行在多台機器上執行命令,極大簡化集群運維操作。本文通過實例展示其在 Cron 任務批量管理、文件收集、輸出標籤等場景的應用。

前置準備:主機列表文件

建立 host.lst 文件,每行一個 SSH 登入規格,例如:

user@192.168.1.10
user@192.168.1.11
user@192.168.1.12

確保已配置 SSH 免密登入(或使用 ssh-agent)。

場景一:批量查看與設置 Cron 任務

查看所有主機的當前 Cron 任務

parallel --nonall -j0 --slf host.lst "hostname; crontab -l"
  • --nonall:無輸入參數,直接在所有 --slf 指定的主機上執行
  • -j0:最大並行數(不限制)
  • --slf:讀取 SSH 登入列表文件

查看 /var/spool/cron 目錄

parallel --nonall -j0 --slf host.lst "hostname; ls -l /var/spool/cron"

批量設置 Cron 任務(每天 0:0 執行 nmon 採集)

parallel --nonall -j0 --slf host.lst \
  'echo "0 0 * * * cd /root/nmon;/root/nmon/nmon -f -s600 -c144" > /var/spool/cron/root'

注意:引號嵌套需轉義,建議使用單引號包裹整個命令,內部雙引號轉義。

場景二:--tag 為輸出添加標識

--tag 會在每行輸出前加上標識:

  • 有輸入參數時:標識為輸入參數值
  • 無輸入參數(--nonall)時:標識為 SSH 登入規格(即 host.lst 中的行)
parallel --tag --nonall -j0 --slf host.lst uptime

輸出示例:

user@192.168.1.10  10:00:01 up 30 days,  2:15,  1 user,  load average: 0.12, 0.08, 0.05
user@192.168.1.11  10:00:01 up 45 days,  5:30,  2 user,  load average: 0.05, 0.03, 0.01

場景三:SCP 並行收集文件

從所有主機下載 /root/nmon/ 下匹配 *160401*.nmon 的文件到當前目錄:

parallel -a host.lst scp '"{}:/root/nmon/*160401*.nmon"' .
  • -a host.lst:從文件讀取參數列表(每行一個主機)
  • {}:佔位符,代表當前行內容
  • 單引號包裹遠端路徑,防止本地 Shell 展開通配符

常用參數速查表

參數說明
--nonall無輸入流,直接在所有 --slf 主機執行命令
-j N最大並行任務數,0 表示無限制
--slf FILE從文件讀取 SSH 登入列表
--tag輸出行前添加標籤
-a FILE從文件讀取輸入參數(替代 stdin)

GNU Parallel 還支持超時控制、重試、進度條、負載均衡等高級功能,詳見 man parallel 或官方 教程。善用此工具,可將原本串行耗時的運維操作縮減數十倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved