Bash

如何在多個實例中執行腳本?(Ubuntu伺服器)

  • July 10, 2021

如何在 Ubuntu 伺服器的多個實例中執行腳本?

例如,我有一個名為scanner.sh放置在的長時間執行/usr/bin/的腳本,我希望在 10 個並行實例中執行該腳本。如何啟動並行任務(並向它們傳遞不同的標誌/選項/參數)?

以及如何停止實例?

#**parallel_scaller.sh**
# Script to async run scanner.sh
# USAGE: $> bash parallel_scanner.sh "FLAGS FOR INSTANCE 1" ... "FLAGS FOR INSTANCES 10"
$1=`echo $1 | sed 's/"//g'`
$2=`echo $1 | sed 's/"//g'`
$3=`echo $1 | sed 's/"//g'`
$4=`echo $1 | sed 's/"//g'`
$5=`echo $1 | sed 's/"//g'`
$6=`echo $1 | sed 's/"//g'`
$7=`echo $1 | sed 's/"//g'`
$8=`echo $1 | sed 's/"//g'`
$9=`echo $1 | sed 's/"//g'`
$10=`echo $1 | sed 's/"//g'`

bash scanner& $1 2>&1
bash scanner& $2 2>&1
bash scanner& $3 2>&1
bash scanner& $4 2>&1 
bash scanner& $5 2>&1
bash scanner& $6 2>&1
bash scanner& $7 2>&1
bash scanner& $8 2>&1
bash scanner& $9 2>&1
bash scanner& $10 2>&1

& 將任務置於後台。2>&1 將 STDERR(2) 重定向到 STDOUT(1)。

要結束程序,請鍵入:

$> ps aux | grep scanner
$> kill $PIDS

使用 GNU Parallel 它看起來像這樣:

parallel scanner {} ::: "--flags --for --instance 1" "--for 2" "--for 3"

它將為每個 CPU 生成一個作業。要停止只需按 CTRL-C。

GNU Parallel 是一個通用的並行器,可以輕鬆地在同一台機器上或在您可以通過 ssh 訪問的多台機器上並行執行作業。它通常可以替換for循環。

如果您想在 4 個 CPU 上執行 32 個不同的作業,那麼並行化的直接方法是在每個 CPU 上執行 8 個作業:

簡單的調度

GNU Parallel 會在完成後生成一個新程序 - 保持 CPU 處於活動狀態,從而節省時間:

GNU 並行調度

安裝

如果沒有為您的發行版打包 GNU Parallel,您可以進行個人安裝,這不需要 root 訪問權限。這樣做可以在 10 秒內完成:

$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
  fetch -o - http://pi.dk/3 ) > install.sh
$ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
12345678 883c667e 01eed62f 975ad28b 6d50e22a
$ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
cc21b4c9 43fd03e9 3ae1ae49 e28573c0
$ sha512sum install.sh | grep da012ec113b49a54e705f86d51e784ebced224fdf
79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
$ bash install.sh

有關其他安裝選項,請參閱http://git.savannah.gnu.org/cgit/parallel.git/tree/README

學到更多

查看更多範例:http ://www.gnu.org/software/parallel/man.html

觀看介紹影片:https ://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

瀏覽教程:http ://www.gnu.org/software/parallel/parallel_tutorial.html

註冊電子郵件列表以獲得支持:https ://lists.gnu.org/mailman/listinfo/parallel

引用自:https://unix.stackexchange.com/questions/159077