macOS (as root)

Installing HTCondor on macOS as root user is a multi-step process. For a multi-machine HTCondor pool, information about the roles each machine will play can be found here: Administrative Quick Start Guide. Note that the get_htcondor tool cannot perform the installation steps on macOS at present. You must follow the instructions below.

Note that all of the following commands must be run as root, except for downloading and extracting the tarball.

The condor Service Account

The first step is to create a service account under which the HTCondor daemons will run. The commands that specify a PrimaryGroupID or UniqueID may fail with an error that includes eDSRecordAlreadyExists. If that occurs, you will have to retry the command with a different id number (other than 300).

dscl . -create /Groups/condor
dscl . -create /Groups/condor PrimaryGroupID 300
dscl . -create /Groups/condor RealName 'Condor Group'
dscl . -create /Groups/condor passwd '*'
dscl . -create /Users/condor
dscl . -create /Users/condor UniqueID 300
dscl . -create /Users/condor passwd '*'
dscl . -create /Users/condor PrimaryGroupID 300
dscl . -create /Users/condor UserShell /usr/bin/false
dscl . -create /Users/condor RealName 'Condor User'
dscl . -create /Users/condor NFSHomeDirectory /var/empty


The next step is to download HTCondor. If you want to select a specific version of HTCondor, you can download the corresponding file from our website. Otherwise, we recommend using our download script, as follows.

curl -fsSL | /bin/bash -s -- --download

If you use a web browser to download a tarball from our web site, then the OS will mark the file as quarantined. All binaries extracted from the tarball will be similarly marked. The OS will refuse to run any binaries that are quarantined. You can remove the quarantine marking from the tarball before extracting it, like so:

xattr -d condor-10.7.1-x86_64_macOS13-stripped.tar.gz


Unpack the tarball.

mkdir /usr/local/condor
tar -x -C /usr/local/condor --strip-components 1 -f condor.tar.gz

You won’t need condor.tar.gz again, so you can remove it now if you wish.

Set up the log directory and default configuration files.

cd /usr/local/condor
mkdir -p local/log
mkdir -p local/config.d
cp etc/examples/condor_config etc/condor_config
cp etc/examples/00-htcondor-9.0.config local/config.d

If you are setting up a single-machine pool, then run the following command to finish the configuration.

cp etc/examples/00-minicondor local/config.d

If you are setting up part of a multi-machine pool, then you’ll have to make some other configuration changes, which we don’t cover here.

Next, fix up the permissions of the the installed files.

chown -R root:wheel /usr/local/condor
chown -R condor:condor /usr/local/condor/local/log

Finally, make the configuration file available at one of the well-known locations for the tools to find.

mkdir -p /etc/condor
ln -s /usr/local/condor/etc/condor_config /etc/condor

Start the Daemons

Now, register HTCondor has a service managed by launchd and start up the daemons.

cp /usr/local/condor/etc/examples/condor.plist /Library/LaunchDaemons
launchctl load /Library/LaunchDaemons/condor.plist
launchctl start condor

Using HTCondor

You’ll want to add the HTCondor bin and sbin directories to your PATH environment variable.

export PATH=$PATH:/usr/local/condor/bin:/usr/local/condor/sbin

If you want to use the Python bindings for HTCondor, you’ll want to add them to your PYTHONPATH.

export PYTHONPATH="/usr/local/condor/lib/python3${PYTHONPATH+":"}${PYTHONPATH-}"

Verifying a Single-Machine Installation

You can easily check to see if the installation procedure succeeded. The following commands should complete without errors, producing output that looks like the corresponding example.

Name                 OpSys      Arch   State     Activity     LoadAv Mem   Actv  LINUX      X86_64 Unclaimed Benchmarking  0.000 2011  0+00  LINUX      X86_64 Unclaimed Idle          0.000 2011  0+00  LINUX      X86_64 Unclaimed Idle          0.000 2011  0+00  LINUX      X86_64 Unclaimed Idle          0.000 2011  0+00

           Total Owner Claimed Unclaimed Matched Preempting Backfill  Drain

X86_64/LINUX    4     0       0        4        0          0        0      0
       Total    4     0       0        4        0          0        0      0
-- Schedd: : < @ 11/11/20 14:44:06

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

If both commands worked, the installation likely succeeded.

Where to Go from Here