Home DevOps ON HOLD vs ON ICE in AutoSys — The Critical Difference

ON HOLD vs ON ICE in AutoSys — The Critical Difference

Where developers are forged. · Structured learning · Free forever.
📍 Part of: AutoSys → Topic 21 of 30
AutoSys ON_HOLD and ON_ICE look similar but behave very differently when released.
⚙️ Intermediate — basic DevOps knowledge assumed
In this tutorial, you'll learn:
  • 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
✦ Plain-English analogy ✦ Real code with output ✦ Interview questions
⚡ Quick Answer
ON_HOLD is like pausing a video — when you press play again, it continues exactly where it left off. ON_ICE is like switching the TV off — when you turn it back on, it waits for the next scheduled programme, not the one you were watching.

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.

on_hold.sh · BASH
1234567891011
# 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
▶ Output
Job Name ST Exit
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 */
⚠️
Releasing ON_HOLD can start a job immediatelyIf you hold a job after its scheduled start time passes, releasing it with OFF_HOLD will start it immediately because the time condition is already past. This catches people off guard. If you want the job to wait until the next day's scheduled run, use ON_ICE instead.

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.

on_ice.sh · BASH
12345678
# 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
▶ Output
Job Name ST Exit
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.

hold_vs_ice_decision.sh · BASH
1234567891011
# 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
AspectON_HOLD (OH)ON_ICE (OI)
Status codeOHOI
How to setsendevent -E JOB_ON_HOLDsendevent -E JOB_ON_ICE
How to releasesendevent -E JOB_OFF_HOLDsendevent -E JOB_OFF_ICE
After release behaviourStarts immediately if conditions currently metWaits for conditions to reoccur in next cycle
Use caseTemporary hold, manual release when readySkip current period, resume at next scheduled time
Risk if misusedJob starts unexpectedly after releaseJob 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.

🔥
Naren Founder & Author

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.

← PreviousAutoSys autorep CommandNext →Force Start and Kill Job in AutoSys
Forged with 🔥 at TheCodeForge.io — Where Developers Are Forged