Startd Cron and Schedd Cron
Daemon ClassAd Hooks
The Startd Cron and Schedd Cron Daemon ClassAd Hooks mechanism are used to run executables (called jobs) directly from the condor_startd and condor_schedd daemons. The output from these jobs is incorporated into the machine ClassAd generated by the respective daemon. This mechanism and associated jobs have been identified by various names, including the Startd Cron, dynamic attributes, and a distribution of executables collectively known as Hawkeye.
Pool management tasks can be enhanced by using a daemon’s ability to periodically run executables. The executables are expected to generate ClassAd attributes as their output; these ClassAds are then incorporated into the machine ClassAd. Policy expressions can then reference dynamic attributes (created by the ClassAd hook jobs) in the machine ClassAd.
The output of the job is incorporated into one or more ClassAds when the job exits. When the job outputs the special line:
the output of the job is merged into all proper ClassAds, and an update goes to the condor_collector daemon.
As of version 8.3.0, it is possible for a Startd Cron job (but not a Schedd Cron job) to define multiple ClassAds, using the mechanism defined below:
An output line starting with
'-'has always indicated end-of-ClassAd. The
'-'can now be followed by a uniqueness tag to indicate the name of the ad that should be replaced by the new ad. This name is joined to the name of the Startd Cron job to produced a full name for the ad. This allows a single Startd Cron job to return multiple ads by giving each a unique name, and to replace multiple ads by using the same unique name as a previous invocation. The optional uniqueness tag can also be followed by the optional keyword
update:<bool>, which can be used to override the Startd Cron configuration and suppress or force immediate updates.
In other words, the syntax is:
[name ] [update: bool]
Each ad can contain one of four possible attributes to control what slot ads the ad is merged into when the condor_startd sends updates to the collector. These attributes are, in order of highest to lower priority (in other words, if
SlotMergeConstraintmatches, the other attributes are not considered, and so on):
SlotMergeConstraint expression: the current ad is merged into all slot ads for which this expression is true. The expression is evaluated with the slot ad as the TARGET ad.
SlotName|Name string: the current ad is merged into all slots whose
Nameattributes match the value of
SlotNameup to the length of
SlotTypeId integer: the current ad is merged into all ads that have the same value for their
SlotId integer: the current ad is merged into all ads that have the same value for their
For example, if the Startd Cron job returns:
Value=1 SlotId=1 -s1 Value=2 SlotId=2 -s2 Value=10 - update:true
it will set
Value=10 for all slots except slot1 and slot2. On those
slots it will set
Value=2 respectively. It will also
send updates to the collector immediately.
Configuration variables related to Daemon ClassAd Hooks are defined in Configuration File Entries Relating to Daemon ClassAd Hooks: Startd Cron and Schedd Cron
Here is a complete configuration example. It defines all three of the available types of jobs: ones that use the condor_startd, benchmark jobs, and ones that use the condor_schedd.
# # Startd Cron Stuff # # auxiliary variable to use in identifying locations of files MODULES = $(ROOT)/modules STARTD_CRON_CONFIG_VAL = $(RELEASE_DIR)/bin/condor_config_val STARTD_CRON_MAX_JOB_LOAD = 0.2 STARTD_CRON_JOBLIST = # Test job STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) test STARTD_CRON_TEST_MODE = OneShot STARTD_CRON_TEST_RECONFIG_RERUN = True STARTD_CRON_TEST_PREFIX = test_ STARTD_CRON_TEST_EXECUTABLE = $(MODULES)/test STARTD_CRON_TEST_KILL = True STARTD_CRON_TEST_ARGS = abc 123 STARTD_CRON_TEST_SLOTS = 1 STARTD_CRON_TEST_JOB_LOAD = 0.01 # job 'date' STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) date STARTD_CRON_DATE_MODE = Periodic STARTD_CRON_DATE_EXECUTABLE = $(MODULES)/date STARTD_CRON_DATE_PERIOD = 15s STARTD_CRON_DATE_JOB_LOAD = 0.01 # Job 'foo' STARTD_CRON_JOBLIST = $(STARTD_CRON_JOBLIST) foo STARTD_CRON_FOO_EXECUTABLE = $(MODULES)/foo STARTD_CRON_FOO_PREFIX = Foo STARTD_CRON_FOO_MODE = Periodic STARTD_CRON_FOO_PERIOD = 10m STARTD_CRON_FOO_JOB_LOAD = 0.2 # # Benchmark Stuff # BENCHMARKS_JOBLIST = mips kflops # MIPS benchmark BENCHMARKS_MIPS_EXECUTABLE = $(LIBEXEC)/condor_mips BENCHMARKS_MIPS_JOB_LOAD = 1.0 # KFLOPS benchmark BENCHMARKS_KFLOPS_EXECUTABLE = $(LIBEXEC)/condor_kflops BENCHMARKS_KFLOPS_JOB_LOAD = 1.0 # # Schedd Cron Stuff. Unlike the Startd, # a restart of the Schedd is required for changes to take effect # SCHEDD_CRON_CONFIG_VAL = $(RELEASE_DIR)/bin/condor_config_val SCHEDD_CRON_JOBLIST = # Test job SCHEDD_CRON_JOBLIST = $(SCHEDD_CRON_JOBLIST) test SCHEDD_CRON_TEST_MODE = OneShot SCHEDD_CRON_TEST_RECONFIG_RERUN = True SCHEDD_CRON_TEST_PREFIX = test_ SCHEDD_CRON_TEST_EXECUTABLE = $(MODULES)/test SCHEDD_CRON_TEST_PERIOD = 5m SCHEDD_CRON_TEST_KILL = True SCHEDD_CRON_TEST_ARGS = abc 123