Introduction
This article describes how the substitution of parameter values works in JobScheduler. It also describes how to use parameters in shell script, API Jobs and pre- and postprocessing scripts.
Substitution of parameter values by the JobScheduler
The JobScheduler can substitute the values of environment variables in task parameters using ${<env_var>}
.
The JobScheduler will substitute <env_var>
with empty
when the variable is unknown.
To avoid this the value can be quoted with a backslash - i.e. \${<env_var>}
Example
This job will produce the following output when running:
Please note:
${test}
has been substituted toempty
- To access the value of the parameter in a shell script, the name must be prefixed. The default value of the prefix is:
- SCHEDULER_PARAM_
- This prefix can be set by the
scheduler.variable_name_prefix
parameter which is defined in the$scheduler_data/config/scheduler.xml
file.- JobScheduler has to be restarted after the value of the prefix has been changed.
Note: JobScheduler does NOT substitute environment variables in order parameters.
Substitution of parameter values by sos.scheduler.managed.configuration.ConfigurationOrderMonitor
An add substitution mechanism for jobs running in a job chain is provided by the sos.scheduler.managed.configuration.ConfigurationOrderMonitor
preprocessing java class:
This preprocessing java class does the following:
- Before processing:
- it copies the node parameters that are defined in
jobchain.config.xml
into the the order parameters - if an order parameter with the same name already exists, it will be overwritten
- substitutes all
${<param>}
variables with:- JobScheduler parameters that are defined in the
$scheduler_data/config/scheduler.xml
file, - task parameters that are defined in the actual running job,
- order parameters that are defined in the order,
- node parameters that has been copied to the order parameters.
- JobScheduler parameters that are defined in the
- it copies the node parameters that are defined in
- After processing:
- deletes all node parameters from the order.
Please note:
- If a task parameter value is to be substituted by the configurationMonitor the value has to be quoted with a backslash to avoid the substitution by the JobScheduler
- Example:
a value \${param}
- Example:
- If the parameter
scheduler.order.keep_order_content_on_reschedule=true
the values will be substituted only in the first run. - When using node parameters the configurationMonitor must be assigned to the job
- JOE will assign the configurationMontitor automatically when defining a node parameter in a job chain
- if substitution does not work, please check whether the configuration monitor is assigned to the job
- if not make the assignment manually with JOE.
Substitution of parameter values by JITL Jobs that extend the JobSchedulerJobAdapter
base class
Some JITL-Jobs extend the JobSchedulerJobAdapter
base class and some older jobs extend JobSchedulerJob
. For a detailed list see here: JITL Jobs - Status
This article describes the substitution in JITL-Jobs that extend the JobSchedulerJobAdapter
base class.
Substitiution is carried out for:
- task parameters and
- order parameters
The following patterns are recognized as parameters to be substituted:
%param%
${param}
§{param}
Where param
can be:
- a task parameter
- a order parameter
- a node parameter
- a scheduler parameter
- some special values (see the list below)
List of special values:
Name | Value |
---|---|
SCHEDULER_HOST | spooler.hostname() |
SCHEDULER_TCP_PORT | spooler.tcp_port() |
SCHEDULER_UDP_PORT | spooler.udp_port() |
SCHEDULER_ID | spooler.id() |
SCHEDULER_DIRECTORY | spooler.directory() |
SCHEDULER_CONFIGURATION_DIRECTORY | spooler.configuration_directory() |
SCHEDULER_JOB_CHAIN_NAME | spooler_task.order().job_chain().name() |
SCHEDULER_JOB_CHAIN_TITLE | spooler_task.order().job_chain().title() |
SCHEDULER_ORDER_ID | spooler_task.order().id() |
SCHEDULER_NODE_NAME | getCurrentNodeName(false) |
SCHEDULER_NEXT_NODE_NAME | spooler_task.order().job_chain_node().next_state() |
SCHEDULER_NEXT_ERROR_NODE_NAME | spooler_task.order().job_chain_node().error_state() |
SCHEDULER_JOB_NAME | this.getJobName() |
SCHEDULER_JOB_FOLDER | this.getJobName() |
SCHEDULER_JOB_PATH | this.getJobFolder() + / + this.getJobName() |
SCHEDULER_JOB_TITLE | this.getJobTitle() |
SCHEDULER_TASK_ID | spooler_task.id() |
SCHEDULER_SUPERVISOR_HOST | remoteConfigurationService.hostname() |
SCHEDULER_SUPERVISOR_PORT | remoteConfigurationService.tcp_port() |
- Parameters named
param
andscheduler_param_param
will be treated as being identical. - Parameters named
param_plus_any_understrikes
andparamplusanyunderstrikes
will be treated as being identical.
Note: Substitution only applies for the current job run. That means that the values of the parameters will be unsubstituted after the execution of the job. If you have an order parameter param_x
whose value is value
is ${param_y}
and there are two steps in the job chain, the value of param_x
after the execution of the first node will still be
value
is
${param_y}