2012-12-13 23 views
10

Tôi có hơn 200 công việc cần gửi đến và sge cluster. Tôi sẽ gửi chúng thành hai ques. Một trong những ques có một cái máy mà tôi không muốn gửi công việc. Làm thế nào tôi có thể loại trừ máy đó? Điều duy nhất tôi thấy rằng có thể hữu ích là (giả sử ba nút hợp lệ có sẵn cho q1 và tất cả các nút có sẵn cho q2 đều hợp lệ):không bao gồm các nút từ lệnh qsub trong sge

qsub -q [email protected] [email protected] [email protected] q2.q 

Trả lời

-1

Có một cách dễ dàng.

Tạo một file bash đơn giản:

#!/bin/bash 
sleep 6000 #replace 6000 with any long period of time that will be enough to submit your jobs 

trình công việc này đến nút bạn muốn loại trừ cho đến khi họ hoàn toàn chiếm nó.

Wuala, nút của bạn bị loại trừ.

+0

Đây là giải pháp hack nhưng là giải pháp duy nhất phù hợp với tôi (+1). Tôi đã thử một tá biến thể qsub nhưng chúng không tạo ra sự khác biệt hoặc gây ra lỗi .... – DaveFar

2

Cách tốt nhất tôi đã tìm thấy cho điều này là thiết lập tài nguyên tùy chỉnh trên các nút mà bạn muốn cho phép thực thi, sau đó yêu cầu tài nguyên đó khi bạn gửi công việc.

Trong qmon, chuyển đến cấu hình "phức tạp" và thêm thuộc tính mới. Đặt tên cho một cái gì đó như "my_allowed" và phím tắt cho một cái gì đó như "m_a", loại BOOL, mối quan hệ với ==, có thể yêu cầu Có, tiêu thụ thành Không và "Thêm" nó. Cam kết thay đổi của bạn đối với các cấu hình phức tạp.

Bước tiếp theo có thể dễ dàng hơn để làm từ dòng lệnh, nhưng bạn cũng có thể làm điều đó trong qmon. Bạn cần phải thêm tiêu hao của bạn cho mỗi máy chủ mà bạn sẽ cho phép công việc của bạn chạy trên đó. Trong qmon, bạn có thể đi đến cấu hình máy chủ, chọn máy chủ thực thi và mở mỗi máy chủ lần lượt, nhấp vào tab hàng tiêu dùng/thuộc tính cố định và thêm phức hợp mới mà bạn vừa định cấu hình ở trên bằng "True" làm giá trị. Từ dòng lệnh, bạn có thể nhận danh sách các máy chủ thực thi của bạn với "qconf -sel". Danh sách này phù hợp để chuyển đến một vòng lặp và tìm kiếm (các) máy chủ mà bạn không muốn đưa vào. Làm điều gì đó như thế này:

qconf -sel | grep -v host_to_exclude | while read host; do 
    EDITOR="ed" qconf -me $h <<EOL 
/complex_values/s/$/,my_test=True/ 
w 
q 
EOL 
done 

Điều này cho phép bạn lập trình chỉnh sửa máy chủ (không được qconf bình thường khi muốn khởi động trình chỉnh sửa cho bạn). Nó làm điều này bằng cách thiết lập trình soạn thảo để "ed" (bạn sẽ phải chắc chắn rằng bạn đã cài đặt trình chỉnh sửa ed ... thử chạy nó bằng tay trước ... gõ "q" để thoát ra). ed có danh sách các lệnh chỉnh sửa trên stdin của nó, vì vậy chúng tôi cung cấp cho nó ba lệnh. Lần đầu tiên chỉnh sửa dòng có complex_values ​​trên nó để bao gồm giá trị my_test. Thứ hai viết ra tập tin tạm thời và lần thứ ba thoát khỏi ed.

Một khi bạn đã làm điều này, trình công việc của bạn với một lựa chọn giới hạn đó đòi hỏi phức tạp mới của bạn:

qsub -q whatever -l my_test=True my_prog.sh 

Các tùy chọn -l đặt ra một giới hạn và my_test = True nói rằng công việc chỉ có thể chạy trên máy chủ có my_test phức tạp với giá trị True. Vì phức tạp không phải là tiêu hao, nó vẫn có thể chạy nhiều công việc trên mỗi máy chủ như nó muốn (tối đa giới hạn vị trí cho máy chủ), nhưng nó sẽ tránh bất kỳ máy chủ nào không có tổ hợp my_test được đặt thành True .

15

Giả sử bạn không muốn chạy nó được gọi là n4 sau đó thêm nội dung sau vào tập lệnh của bạn sẽ hoạt động.

#$ -l h=!n4 
+2

Tôi nhận được "qsub: submit error (Loại tài nguyên không xác định Resource_List.h)" – dranxo

+0

Cảm ơn.Làm thế nào bạn có thể làm điều này với hai tên máy chủ? '# $ -l h =! n4 h! = n5' hoặc' # $ -l h! = n4, n5' không hoạt động – Arman

+0

h =! h4 &! h5 hoặc h =! (h4 | h5) nên thực hiện. –

Các vấn đề liên quan