ON HOLD vs ON ICE in AutoSys — The Critical Difference
- ON_HOLD (OH): releasing runs the job immediately if conditions are currently met — use for manual-release scenarios
- ON_ICE (OI): releasing waits for conditions to reoccur in the next cycle — use for skipping the current run and resuming normally
- This is one of the most common AutoSys interview questions — the release behaviour difference is what matters
ON_HOLD and ON_ICE are the two ways to suspend a job in AutoSys. They're often confused because both stop a job from running — but their release behaviour is completely different, and choosing the wrong one in a production recovery scenario can cause jobs to either run unexpectedly or not run until the next day. Get this distinction right.
ON_HOLD — suspend and resume at current conditions
When a job is ON_HOLD, it is frozen in its current state. If you put a job on hold while its starting conditions were already met, releasing it (OFF_HOLD) will cause it to start immediately — the conditions are still true.
# Put a job on hold sendevent -E JOB_ON_HOLD -J daily_report # Release from hold — starts immediately if conditions are met sendevent -E JOB_OFF_HOLD -J daily_report # Put an entire BOX on hold (and all inner jobs) sendevent -E JOB_ON_HOLD -J eod_processing_box # Check if a job is on hold autorep -J daily_report # shows OH status
daily_report OH -- <- ON_HOLD — conditions may already be met
/* After JOB_OFF_HOLD: */
/* If start_times was 02:00 and it's now 03:00 — job starts immediately */
ON_ICE — suspend and wait for next condition cycle
When a job is ON_ICE, it's more deeply suspended. When you release it (OFF_ICE), the job does NOT start immediately — it waits for its conditions to become true in the next scheduling cycle.
For a job with start_times: '02:00', releasing it from ON_ICE at 3 AM means it won't run until the next scheduled 2 AM — it waits for the condition to reoccur, not to re-evaluate it as currently true.
# Put a job on ice sendevent -E JOB_ON_ICE -J weekly_reconcile # Release from ice — waits for conditions to reoccur (next cycle) sendevent -E JOB_OFF_ICE -J weekly_reconcile # Check if a job is on ice autorep -J weekly_reconcile # shows OI status
weekly_reconcile OI -- <- ON_ICE
/* After JOB_OFF_ICE at 03:00 (job normally runs at 02:00): */
/* Job waits until NEXT scheduled 02:00 — does NOT run at 03:00 */
Which to use when
The decision is simple once you understand the release behaviour:
Use ON_HOLD when: You want to delay a job temporarily and start it manually when ready. Maintenance windows. Jobs you want to run manually at a specific moment after releasing.
Use ON_ICE when: You want to skip a job for the current scheduling period and have it resume at its next normal scheduled time. Disabling a job for a few days without permanently modifying its definition. Safe suspension when you're not sure when you'll release it.
# Scenario 1: Emergency maintenance, want to run job manually when done # Use ON_HOLD — releases will start immediately when ready sendevent -E JOB_ON_HOLD -J daily_settlement # ... do maintenance ... sendevent -E JOB_OFF_HOLD -J daily_settlement # starts now # Scenario 2: Job has a bug being fixed, skip today's run # Use ON_ICE — releases will wait for tomorrow's scheduled run sendevent -E JOB_ON_ICE -J daily_settlement # ... fix deployed by end of day ... sendevent -E JOB_OFF_ICE -J daily_settlement # runs tomorrow at 02:00 as normal
| Aspect | ON_HOLD (OH) | ON_ICE (OI) |
|---|---|---|
| Status code | OH | OI |
| How to set | sendevent -E JOB_ON_HOLD | sendevent -E JOB_ON_ICE |
| How to release | sendevent -E JOB_OFF_HOLD | sendevent -E JOB_OFF_ICE |
| After release behaviour | Starts immediately if conditions currently met | Waits for conditions to reoccur in next cycle |
| Use case | Temporary hold, manual release when ready | Skip current period, resume at next scheduled time |
| Risk if misused | Job starts unexpectedly after release | Job misses current run entirely |
🎯 Key Takeaways
- ON_HOLD (OH): releasing runs the job immediately if conditions are currently met — use for manual-release scenarios
- ON_ICE (OI): releasing waits for conditions to reoccur in the next cycle — use for skipping the current run and resuming normally
- This is one of the most common AutoSys interview questions — the release behaviour difference is what matters
- Setting a box ON_HOLD also holds all inner jobs; same for ON_ICE
⚠ Common Mistakes to Avoid
- ✕Putting a job ON_HOLD expecting it to wait until the next scheduled run — it runs immediately on release if conditions are met
- ✕Putting a job ON_ICE when you need it to run manually — it won't run even if you FORCE_STARTJOB it while it's on ice (in some versions)
- ✕Forgetting a job is ON_ICE and wondering why it's not running for days
- ✕Using ON_HOLD on a box job without understanding it puts all inner jobs on hold too
Interview Questions on This Topic
- QWhat is the difference between ON_HOLD and ON_ICE in AutoSys?
- QIf you release a job from ON_HOLD at 3 AM when its scheduled time was 2 AM, what happens?
- QIf you release a job from ON_ICE at 3 AM when its scheduled time was 2 AM, what happens?
- QWhen would you use ON_ICE instead of ON_HOLD?
- QWhat AutoSys status code represents ON_HOLD and ON_ICE?
Frequently Asked Questions
What is the difference between ON_HOLD and ON_ICE in AutoSys?
When you release a job from ON_HOLD, it starts immediately if its starting conditions are currently met. When you release from ON_ICE, it waits for conditions to reoccur in the next scheduling cycle — it won't start immediately even if conditions are true.
Which is safer to use — ON_HOLD or ON_ICE?
ON_ICE is generally safer when you want to skip a current run and resume normally. ON_HOLD is better when you plan to manually trigger the job as soon as the hold is released. The choice depends on your intent.
Can you FORCE_STARTJOB a job that is ON_ICE?
In most AutoSys versions, you cannot force-start a job that is ON_ICE. You must first take it off ice, then force-start it. This is different from ON_HOLD, where a force-start event can often override the hold.
Does putting a BOX on hold affect the jobs inside?
Yes. When a BOX job is placed ON_HOLD or ON_ICE, the box cannot enter RUNNING state, so none of its inner jobs can start. The hold effectively applies to the entire box contents.
What is the status code for ON_HOLD and ON_ICE in autorep?
ON_HOLD shows as OH in autorep status output. ON_ICE shows as OI.
Developer and founder of TheCodeForge. I built this site because I was tired of tutorials that explain what to type without explaining why it works. Every article here is written to make concepts actually click.