A quick guide to HTCondor

From GridPP Wiki
Jump to: navigation, search

Basic commands

Firstly, some basic HTCondor commands are as follows. To submit a job, type:

condor_submit <file>

To list your running and idle jobs, type:


To list completed jobs, type:


Job submission

Create a file called simplejob.sub containing:

should_transfer_files = YES
when_to_transfer_output = ON_EXIT

and a script called script.sh containing:

sleep $1

Make sure it's executable:

chmod 755 script.sh

Submit the job:

-bash-4.1$ condor_submit simplejob.sub
Submitting job(s).
1 job(s) submitted to cluster 91959.

Checking the status of the job:

-bash-4.1$ condor_q

-- Schedd: lcgui03.gridpp.rl.ac.uk : <
91959.0   alahiff         2/26 13:08   0+00:00:07 R  0   0.0  script.sh 10

1 jobs; 0 completed, 0 removed, 0 idle, 1 running, 0 held, 0 suspended

Explanation of the content of script.sh:

  • cmd=script.sh: the job will execute the script script.sh
  • arguments=10: the argument 10 will be passed to the executable when it is run
  • RequestMemory=100: request 100MB memory for the job
  • should_transfer_files = YES: tells HTCondor to transfer files to/from the worker node
  • when_to_transfer_output = ON_EXIT: tells HTCondor transfers any output files only when the job has completed
  • output=job.$(cluster).$(process).out: tells HTCondor the path (and name) of the file containing the job's stderr on the submit machine
  • error=job.$(cluster).$(process).err: tells HTCondor the path (and name) of the file containing the job's stdout on the submit machine
  • log=job.$(cluster).$(process).log: tells HTCondor where to write the job event log and the name of the file

The job will:

  • run the script "script.sh" with argument "10"
  • 100 MB of memory will be requested
  • the executable (script.sh in this case) will be automatically transferred to the worker nodes
  • stdout from the job will end up in the file job.91959.0.out (once it completes)
  • stderr from the job will end up in the file job.91959.0.err (once it completes)
  • the log file job.91959.0.log will give some information about the status of the job

Checking the status:

Once the job is completed

-bash-4.1$ ls -lt *91959* -rw-r--r-- 1 alahiff esc 1032 Feb 26 13:09 job.91959.0.log -rw-r--r-- 1 alahiff esc 24 Feb 26 13:09 job.91959.0.out -rw-r--r-- 1 alahiff esc 0 Feb 26 13:08 job.91959.0.err

Note that with this example job description file, all files generated by the job will be automatically transferred back to the machine where you submitted the job (i.e. lcgui03 or lcgui04). You can prevent this from happening by adding:


If the job needs additional files, you can add a line something like this:

transfer_input_files = input1.dat,input2.dat

and they will be copied.

The official documentation is here:


Regards, Andrew.