여러 인스턴스에서 스크립트를 실행하는 방법은 무엇입니까? (우분투 서버)

여러 인스턴스에서 스크립트를 실행하는 방법은 무엇입니까? (우분투 서버)

Ubuntu 서버의 여러 인스턴스에서 스크립트를 실행하는 방법은 무엇입니까?

예를 들어, 10개의 병렬 인스턴스에서 실행하려는 scanner.shPlaced 라는 장기 실행 스크립트가 있습니다 . /usr/bin/병렬 작업을 시작하는 방법(그리고 다른 플래그/옵션/매개변수를 전달하는 방법)은 무엇입니까?

이러한 인스턴스를 어떻게 중지할 수 있습니까?

답변1

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이 패키지되어 있지 않으면 루트 액세스 없이 개인 설치를 수행할 수 있습니다. 이 작업은 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

답변2

#**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

답변3

Ansible과 같은 구성 관리 시스템을 사용해 보시기를 권하고 싶습니다.

Python으로 작성되었으며 초보자도 누구나 쉽게 사용할 수 있습니다.

문서를 따르십시오http://docs.ansible.com/그리고 시작하세요!

답변4

제안된 답변 외에도 다음 명령을 사용합니다.

nohup ./scanner.py -flag1 flag1value -flag2 flag2value &

새 인스턴스를 만듭니다. scanner.py내가 사용하는 모든 실행 중인 인스턴스를 보려면 다음을 수행하세요 .

ps aux | grep scanner.py

특정 인스턴스를 종료하려면 다음을 사용합니다.

kill -9 {PID}

명령에서 가져온 {PID}위치는 다음 과 같습니다.ps auxkill -9 1234

관련 정보