关于测试程序我暂时没有在网上找到一份能够完美运行的教程,遂记录一下我运行成功的案例。

当我们搭建好一个htcondor的pool并且能够通过condor_status看 到节点资源的时候,我们可以通过如下来运行一些测试job:

提交一个简单的condor任务

下面我们提交一个判断1~100素数的例子:

按如下层级结构创建文件夹:

job/ # 任务主文件夹

job/error/ # 存放报错信息

job/input/ # 存放输入文件

job/log/ # 存放日志文件

job/output/ # 存放stdout文件

在job下新建一个可执行程序prime.sh

当我们使用cat > 文件名编辑内容时建议从其他地方直接复制,编辑完毕后按ctrl+D退出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
root@ylxy2:/home/ylxy2/job# cat > prime.sh
#!/bin/bash
# Determine if argument is a prime number.
num=$1
maxd=$((num/2))
div=2
if [[ $num -lt 2 ]];
then
echo $num "is not prime"
exit
fi
while [[ $div -le $maxd ]]
do
res=$(expr $num % $div)
if [[ $res -eq 0 ]]
then
echo $num "is not prime,Divisor is "$div
exit
fi
#i=$(($i+1))
div=$(expr $div + 1)
done
echo $num "is prime"
exit

同一文件夹下新建一个描述文件prime.sub

1
2
3
4
5
6
7
8
9
10
11
root@ylxy2:/home/ylxy2/job# cat > prime.sub
universe = vanilla
initialdir =/home/ylxy2/job
arguments = input/prime$(Process).input
error = error/prime$(Process).error
log = log/prime$(Process).log
output = output/prime$(Process).out
executable = prime.sh
+AccountingGroup = "ylxy2"
Notification=never
queue 100

描述说明:

universe:参数表示HTCondor的运行环境,默认为vanilla。vanilla提供的功能会少一些,但是使用也会较为方便。
initialdir :代表执行开始的地方
error,log,output:利用了“$(Process)”宏,来为每个任务根据进程号来将文件标号,划分开来.

executable:可执行文件的名字
arguments :执行文件需要传递的参数,或者依赖的输入文件等
+AccountingGroup:用你的用户名取代“condor”
Notification:如果不包括此项,condor将会在完成每个任务后发送邮件提醒你。
queue:代表执行多次任务。本示例中100说明:对于这个测试的执行次数。$(Process)将会设置为0~99.

准备输入文件

通过python脚本创建输入数据:

1
2
3
4
for i in range(100):
# 注意提前创建input文件夹
with open('./input/prime{}.input'.format(i), 'w', encoding='utf-8') as f:
f.write("{}".format(i+1))

为执行文件夹添加权限(重要!!!关乎到程序能否正确运行)

1
2
root@ylxy2:/home/ylxy2/job# chmod -R 777 /home/ylxy2/job
root@ylxy2:/home/ylxy2/job#

使用condor_submit指令提交prime.sub

1
2
3
4
root@ylxy2:/home/ylxy2/job# condor_submit prime.sub
Submitting job(s)....................................................................................................
100 job(s) submitted to cluster 20.
root@ylxy2:/home/ylxy2/job#

使用condor_q查看已提交任务的运行状态

注意:只有当节点拥有SCHEDD功能时才可使用condor_q指令。可以进/etc/condor/condor_configDAEMON_LIST后面追加SCHEDD参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
root@ylxy2:/home/ylxy2/job# condor_q


-- Schedd: ylxy2 : <192.168.88.129:36703?... @ 05/03/21 00:29:33
OWNER BATCH_NAME SUBMITTED DONE RUN IDLE TOTAL JOB_IDS
condor ID: 20 5/3 00:29 35 3 62 100 20.29-99

Total for query: 65 jobs; 0 completed, 0 removed, 62 idle, 3 running, 0 held, 0 suspended
Total for all users: 65 jobs; 0 completed, 0 removed, 62 idle, 3 running, 0 held, 0 suspended

root@ylxy2:/home/ylxy2/job# condor_q


-- Schedd: ylxy2 : <192.168.88.129:36703?... @ 05/03/21 00:30:51
OWNER BATCH_NAME SUBMITTED DONE RUN IDLE HOLD TOTAL JOB_IDS

Total for query: 0 jobs; 0 completed, 0 removed, 0 idle, 0 running, 0 held, 0 suspended
Total for all users: 0 jobs; 0 completed, 0 removed, 0 idle, 0 running, 0 held, 0 suspended

condor_q查询返回的任务数变为0时表示任务执行完毕。

使用condor_history查看历史执行的任务

1
2
3
4
5
6
7
8
9
10
11
12
root@ylxy2:/home/ylxy2/job# condor_history
ID OWNER SUBMITTED RUN_TIME ST COMPLETED CMD
20.94 condor 5/3 00:29 0+00:00:02 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.99 condor 5/3 00:29 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.91 condor 5/3 00:29 0+00:00:01 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.98 condor 5/3 00:29 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.97 condor 5/3 00:29 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.96 condor 5/3 00:29 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.95 condor 5/3 00:29 0+00:00:01 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.93 condor 5/3 00:29 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.85 condor 5/3 00:29 0+00:00:01 C 5/3 00:29 /home/ylxy2/job/prime.sh in
20.92 condor 5/3 00:29 C 5/3 00:29 /home/ylxy2/job/prime.sh in

这里只截取了部分,ST列表示执行状态,为C表示已完成。

查看输出文件

1
2
3
4
5
root@ylxy2:/home/ylxy2/job# cat input/prime96.input
97
root@ylxy2:/home/ylxy2/job# cat output/prime96.out
input/prime96.input is prime
root@ylxy2:/home/ylxy2/job#

该输出表明97是素数,程序完美运行。Perfect!(*^▽^*)