Torque 는 PBS(Potable Batch System) 라고도 하며, 클라이언트에서 서버로 스크립트를 보내 처리하게 도와주는 프로그램이다.



간단하게 ssh 를 통해 단일 명령어를 보내주는 방법도 있긴한데, 이 방법은 스크립트(명령어 덩어리) 자체를 보내서 실행하게 하므로


좀 더 편리하게 작업을 할 수 있다는 장점이 있다.


경로 설정도 다양하게 줄 수도 있고, 당연하지만 스크립트이기 때문에 어떠한 명령에도 제약이 없다.



1. 패키지 설치


패키지 설치 과정 (node가 꽤 여러대 있었던 탓에, 아래 node15에서도 설치를 진행함)


+ 사진은 좀 잘못되었는데


서버 : sudo apt-get install torque-common torque-mom torque-scheduler torque-server


클라이언트 : sudo apt-get install torque-common torque-mom torque-scheduler torque-client


이렇게만 진행해야하는 것이 맞다.


서버는 '작업 처리', 클라이언트는 '작업 요청'





2. 서버 설정


pbs_mom, pbs_sched, pbs_server 가 자동으로 시작되어있을텐데


pbs_server 를 뺀 나머지는 kill -9 로 종료한다.


cd /var/spool/torque 로 이동하자




vi server_name 혹은

vi /etc/torque/server_name 에서 호스트이름으로 지정해줘야한다. (ex:필자의 경우는 node11)



이후 /var/spool/torque로 이동, pbs_server.conf 파일을 생성한다.


root@node71:/var/spool/torque# ll

total 72

drwxr-xr-x 12 root root  4096 Apr 11 13:44 ./

drwxr-xr-x  6 root root  4096 Jun 22  2016 ../

drwxr-xr-x  2 root root  4096 Apr  4 20:14 aux/

drwxr-xr-x  2 root root  4096 May 13  2015 checkpoint/

drwxr-xr-x  2 root root 12288 Apr 11 00:04 mom_logs/

drwxr-xr-x  3 root root  4096 Jun 22  2016 mom_priv/

-rw-r--r--  1 root root    35 May 13  2015 pbs_environment

-rw-r--r--  1 root root   740 Jun 22  2016 pbs_server.conf

drwxr-xr-x  2 root root  4096 Apr 10 11:29 sched_logs/

drwxr-xr-x  3 root root  4096 Jun 22  2016 sched_priv/

drwxr-xr-x  2 root root 12288 Apr 11 00:04 server_logs/

lrwxrwxrwx  1 root root    23 May 13  2015 server_name -> /etc/torque/server_name

drwxr-xr-x 12 root root  4096 Apr 11 13:46 server_priv/

drwxrwxrwt  2 root root  4096 Apr  4 20:14 spool/

drwxrwxrwt  2 root root  4096 Apr  4 20:14 undelivered/


root@node71:/var/spool/torque# cat pbs_server.conf 



#Max open servers: 9

#

# Create queues and set their attributes.

#

#

# Create and define queue [큐 이름]

#

create queue [큐 이름]

set queue [큐 이름] queue_type = Execution

set queue [큐 이름] max_running = 10

set queue [큐 이름] resources_default.nodes = 1

set queue [큐 이름] enabled = True

set queue [큐 이름] started = True

#

# Set server attributes.

#

set server acl_hosts = [호스트 이름]

set server acl_hosts += [추가 호스트 이름]

set server managers = root@[호스트 이름]

set server managers += root@[추가 호스트 이름]

set server scheduling=true

set server log_events = 511

set server mail_from = adm

set server scheduler_iteration = 600

set server default_queue = [큐 이름]

set server node_check_rate = 150

set server tcp_timeout = 6

set server next_job_number = 1



이후 server_priv 디렉토리에 nodes 라는 파일을 생성하고


[호스트명] np=[작업을 돌릴 수] 이렇게 정한다.


*nodes 파일 생성은 매우 중요*


파일을  열었을 때 :


node71 np=2


이런식으로 되어있으면 된다


root@node71:/var/spool/torque/server_priv# ll

total 60

drwxr-xr-x 12 root root 4096 Apr 11 13:46 ./

drwxr-xr-x 12 root root 4096 Apr 11 13:44 ../

drwxr-xr-x  2 root root 4096 Apr 10 11:29 accounting/

drwxr-xr-x  2 root root 4096 May 13  2015 acl_groups/

drwxr-xr-x  2 root root 4096 May 13  2015 acl_hosts/

drwxr-xr-x  2 root root 4096 Apr  7 11:11 acl_svr/

drwxr-xr-x  2 root root 4096 May 13  2015 acl_users/

drwxr-xr-x  2 root root 4096 May 13  2015 arrays/

drwxr-xr-x  2 root root 4096 May 13  2015 disallowed_types/

drwxr-xr-x  2 root root 4096 May 13  2015 hostlist/

drwxr-xr-x  2 root root 4096 Apr  4 20:14 jobs/

-rw-r--r--  1 root root   12 Jun 22  2016 nodes

drwxr-xr-x  2 root root 4096 Jun 22  2016 queues/

-rw-------  1 root root 1546 Apr  7 11:11 serverdb

-rw-------  1 root root    5 Apr 10 11:29 server.lock

-rw-------  1 root root    0 Jun 22  2016 tracking


root@node71:/var/spool/torque/server_priv# cat nodes 


node71 np=2


아래는 실제 파일 






** 적용 전에 ps -ef | grep pbs 를 실행하여


/usr/sbin/pbs_server -t create


프로세스를 제외한 나머지 pbs를 전부 종료하자



이후


qmgr < pbs_server.conf 을 해서 실제 torque에 적용시킨다.


완료 후 qterm 을 이용해서 종료.



만약 재설정이 하고싶으면


pbs_server -t create 명령어를 실행 후 y를 누르면 설정이 초기화된다.


3. 테스트




이후 pbs_mom, pbs_sched pbs_server 다시 실행


pbsnodes -a 로 실행이 됐는지 확인해보자


node75

     state = free

     np = 2

     ntype = cluster

     status = rectime=1491888183,varattr=,jobs=,state=free,netload=77962621942,gres=,loadave=0.00,ncpus=6,physmem=16309472kb,availmem=47152596kb,totmem=47516892kb,idletime=304,nusers=1,nsessions=2,sessions=4081 5298,uname=Linux node75 3.13.0-108-generic #155-Ubuntu SMP Wed Jan 11 16:58:52 UTC 2017 x86_64,opsys=linux


이런식으로 나오면 성공



node75

     state = down

     np = 2

     ntype = cluster


이런식으로 나오면 실패.. 설정을 다시 한번 보도록 하자. 다양한 이유가 있을 수 있으므로 검색은 필수.


*필자는 방금 헤매다 pbs_mom pbs_sched 를 처음에 종료하지않아 다시 종료 후 셋팅했다.

*/etc/hosts.equiv 에 노드가 등록되어있는지도 확인해보자.



클라이언트 쪽은 따로 설정할 것이 없다.


클라이언트 : qsub -q @서버이름 쉘이름 으로 테스트를 진행한다.


쉘 스크립트는 간단하게


#!/bin/bash


sleep 10

#10초간 대기


이런식으로 작성하면 된다.


qstat @서버이름 로 상태 확인가능하고, job이 없다면 아무것도 뜨지 않음


참고로 서버는 클라이언트에서 /etc/hosts.equiv 에 서버를 등록해야 에러가 발생하지 않는다.

*hosts 파일을 참고해서 작성하면 되겠다.


---------------------------------------------------


2017 06 08 추가 내용


스크립트를 보낼때, ssh 자동 로그인이 되어있지 않으면 실행이 되지 않는다.



필자는 이 기능을 주로 원격지로 파일을 자동으로 보내거나, 원격지에서 파일을 자동으로 수행하게끔 하는데

(ssh 접속 및 원격 커맨드, scp 를 이용한 파일 전송)


스크립트를 보낼때마다 패스워드를 묻게되고, 그렇게 되면 스크립트가 막힌다.


ssh 자동 로그인 등록을 해서 패스워드를 생략하던지 아니면 sshpass 패키지를 설치해서 sshpass 와 패스워드를 같이 요청해야한다.

(명령어에 자동으로 응답하는 것도 있는데 그 방법은 시도하지않았다.)



ssh 자동로그인은 서버 -> 클라이언트는 되지만 클라이언트 -> 서버는 무슨 짓을 해도 안되는 경우가 있었다.

구체적인 이유는 잘 모르겠으나, 신뢰감이 떨어지는 방법이라 할 수 있겠다..

(UID 때문이었을지도? http://blog.rgbplace.com/210 참고)



sshpass 는 패스워드 노출이 있지만,, 매우 간단하므로 이걸 추천한다.


결론 : sshpass 를 사용하자


사용법 클릭!