Why is run held after (1) kill and then (2) trigger

hi there,

in the course of my model development, i frequently need to kill tasks and then re-trigger them. i’m just wondering why whenever i do this, the newly triggered task runs but with the ‘held’ sign on it? i would’ve thought that triggering a task would imply that it doesn’t want to be help any more?



Good question!

In Cylc 8 any task - even running ones - can be “held”. It’s to do with the conceptual separation of task and job.

A held task will not submit a job to run when it becomes ready to submit. But a task can submit multiple jobs (by automatic retry, manual triggering, or new flows through the graph). So a held running task will not submit its next job unless released or manually triggered.

The connection with job kill is this:

If a task has retries configured for failure, you probably don’t want them to activate immediately if you forcibly kill it. So a killed tasks automatically gets held. In the unlikely event that you do want retries to go off in response to the job kill, just release the task.


1 Like

ah nice, thanks for that.

just to be sure, in cylc speak, a job is an instance of a task, right?

so a task could be called foo and the jobs are 01, 02, …, NN?


Well, strictly speaking you need cycle point in there as well, for cycling workflows.

The task foo has an instance in each cycle point 1/foo, 2/foo, 3/foo, etc. (for integer cycling; otherwise 20230101T00Z/foo etc.).

Then, each task instance can submit zero or more jobs e.g. 3/foo/01, 3/foo/02, …

(That hierarchy is reflected in the task ID and log directory too).

1 Like

ah yeah of course, thanks for the extra info! :slight_smile: