2012-04-10 33 views
9

Có cách nào để trực tiếp chuyển tham số sang tập lệnh .pbs trước khi gửi công việc không? Tôi cần lặp qua danh sách các tệp được chỉ định bằng các số khác nhau và áp dụng một tập lệnh để phân tích từng tệp.Trực tiếp chuyển các tham số cho tập lệnh pbs

Điều tốt nhất tôi đã có thể đưa ra như sau:

#!/bin/sh 

for ((i= 1; i<= 10; i++)) 
do 
     export FILENUM=$i 
     qsub pass_test.pbs 
done 

nơi pass_test.pbs là kịch bản sau đây:

#!/bin/sh 

#PBS -V 
#PBS -S /bin/sh 
#PBS -N pass_test 
#PBS -l nodes=1:ppn=1,walltime=00:02:00 
#PBS -M [email protected] 

cd /scratch/XXXXXX/pass_test 

./run_test $FILENUM 

Nhưng điều này cảm thấy một chút rung rinh. Đặc biệt, tôi muốn tránh phải tạo một biến môi trường để xử lý điều này.

Trả lời

8

Tiện ích qsub thể đọc kịch bản từ đầu vào tiêu chuẩn, vì vậy bằng cách sử dụng một ở đây tài liệu bạn có thể tạo ra các kịch bản một cách nhanh chóng, động:

#!/bin/sh 

for i in `seq 1 10` 
do 
    cat <<EOS | qsub - 
#!/bin/sh 

#PBS -V 
#PBS -S /bin/sh 
#PBS -N pass_test 
#PBS -l nodes=1:ppn=1,walltime=00:02:00 
#PBS -M [email protected] 

cd /scratch/XXXXXX/pass_test 

./run_test $i 
EOS 
done 

Cá nhân, tôi sẽ sử dụng một phiên bản nhỏ gọn hơn :

#!/bin/sh 

for i in `seq 1 10` 
do 
    cat <<EOS | qsub -V -S /bin/sh -N pass_test -l nodes=1:ppn=1,walltime=00:02:00 -M [email protected] - 
cd /scratch/XXXXXX/pass_test 
./run_test $i 
EOS 
done 
0

Nếu bạn chỉ cần chuyển số và chạy danh sách công việc có cùng lệnh ngoại trừ số tệp đầu vào, tốt hơn nên sử dụng mảng công việc thay vì vòng lặp for làm mảng công việc ít gánh nặng hơn cho công việc lên lịch.

Để chạy, bạn chỉ định số lượng tập tin với PBS_ARRAYID như thế này trong các tập tin PBS:

./run_test ${PBS_ARRAYID} 

Và để gọi nó, trên dòng lệnh, gõ:

qsub -t 1-10 pass_test.pbs 

nơi bạn có thể chỉ định id mảng để sử dụng sau -t tùy chọn

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