[쉘스크립트] 쉘스크립트로 다수의 작업을 병렬처리 하기

사용자 삽입 이미지

간단하게 두세가지 작업을 수행해야 하는데 이 작업들이 모두 끝나는 시점에 수행해야 하는 작업이 있습니다. 보통 두세가지 작업을 동시에 하려면 &(Ampersand)를 붙여 백그라운드 작업으로 돌리면 해결될 문제입니다. 하지만 모두 끝나는 시점에 무언가를 해야 한다면 조금 생각해볼 문제가 되겠죠.

생각을 해보면 작업을 수행할때마다 PID값을 알아내어 이 PID가 끝나길 기다렸다가 끝나는대로 다음 작업을 수행하면 될 것 같습니다. 이런 경우를 위해 wait라는 명령이 bash쉘에 Builtin되어있습니다. 간단하게 다음의 예제를 확인해 보겠습니다.

#!/bin/sh

echo "예제를 시작합니다"

sleep 10 &
sleep 15 &

echo "모든 명령이 병렬로 실행되었습니다"

WORK_PID=`jobs -l | awk '{print $2}'`
wait $WORK_PID

echo "모든 명령이 종료되었습니다"

이 예제를 실행해 보면 다음과 같은 결과를 보여줍니다.

예제를 시작합니다
모든 명령이 병렬로 실행되었습니다
모든 명령이 종료되었습니다

jobs명령의 경우 -l옵션을 붙여주게 되면 PID값도 함께 출력되게 됩니다. 이것을 이용하면 굳이 매번 프로세스를 실행할때마다 PID를 저장하려는 노력을 하지 않아도 됩니다.

[eye@theeye ~]# sleep 500 &
[1] 4962
[eye@theeye ~]# jobs
[1]+  Running                 sleep 500 &
[eye@theeye ~]# jobs -l
[1]+  4962 Running                 sleep 500 &

이런 명령을 활용하여 복잡한 여러 스크립트들의 수행속도를 꽤 많이 단축시킬 수 있었습니다.

[NMS] 추천할만한 시스템 모니터링 툴 Cacti

사용자 삽입 이미지
괜찮은 NMS툴인 Cacti를 소개합니다. 이름 자체는 선인장인 Cactus의 복수 형을 뜻합니다. 위의 스크린샷에서 대충 알 수 있듯이 트리형태의 뷰를 제공하고 네트워크 트래픽뿐만 아니라 SNMP에서 가져올 수 있는 모든 정보를 보기 좋게 보여줍니다. 인터페이스도 깔끔하고 좋습니다.

이 글은 기억용으로 대충 작성한 글입니다. 참고하시기엔 어려움이 있을것 같습니다. 죄송합니다.

선행 작업으로 다음의 두가지 글을 먼저 수행하시기 바랍니다. Cacti는 기본적으로 rrdtool을 사용합니다.
[rrdtool 설치] [SNMP 설치]

[이곳]에 가셔서 Cacti의 최신버젼을 다운받도록 합시다. 다음은 시스템에 미리 필요로 하는 패키지들을 확인해 보도록 하겠습니다. RPM기반의 리눅스를 사용하고 있다고 가정할 때 다음과 같이 설치가 되어있는지 확인해 봅시다.
[code]httpd
php
php-mysql
php-snmp
mysql
mysql-server
net-snmp[/code]
컴파일 하여 설치할 경우 php의 configure 옵션에 SNMP사용을 위한 –with-snmp가 있어야 합니다.

이제 Cacti를 설치하여 봅시다.
[code]tar xzvf cacti-version.tar.gz
cd cacti-version
mysqladmin –user=root create cacti
mysql cacti < cacti.sql[/code]
MySQL에서 사용자 권한도 추가해 줍니다.
[code lang-sql]> mysql –user=root mysql
> GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY ‘somepassword’;
> flush privileges;[/code]
압축을 푼 Cacti 폴더를 적당한 웹페이지로 접속할수 있는곳으로 이동합니다. 그리고 include/config.php 파일을 수정합니다.
[code]$database_type = “mysql”;
$database_default = “cacti”;
$database_hostname = “localhost”;
$database_username = “cactiuser”;
$database_password = “cacti”;[/code]
Cacti 수행을 위해 cactiuser라는 계정을 만들었다는 조건하에 다음을 수행합니다.
[code]chown -R cactiuser rra/ log/[/code]
그리고 crontab에 다음을 추가합니다. (/var/www/html/cacti에 위치한다고 할때)
[code]*/5 * * * * cactiuser php /var/www/html/cacti/poller.php > /dev/null 2>&1[/code]
이후에 접속하셔서 설정을 진행하시면 됩니다.
그래프의 한글이 깨질경우 include/config.php파일에 putenv(“LANG=ko_KR.UTF-8”);를 추가해 주시면 해결 됩니다.