AutoSys ON_ICE vs ON_HOLD — Why Release Timing Skips Jobs
ON_ICE released at 2:30 AM skipped the 2 AM run entirely, delaying settlement 24 hours.
- ON_HOLD (OH): job is frozen; release means it starts immediately if conditions are currently true
- ON_ICE (OI): job is deeply suspended; release waits for conditions to reoccur in the next cycle
- Key difference: time conditions are evaluated ONCE under ON_ICE, but are currently true under ON_HOLD
- Production impact: using ON_HOLD when you meant ON_ICE can cause a job to run outside its window
- Most common mistake: assuming both behave the same on release — they don't
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_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.
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.
How ON_HOLD and ON_ICE affect dependencies
Both statuses affect downstream jobs that depend on the held/frozen job.
When a job is ON_HOLD, it cannot reach SUCCESS or FAILURE, so any downstream jobs that wait for it (via conditions) will remain in a pending state. Releasing from ON_HOLD will start the job, and once it completes, the downstream jobs will then run.
When a job is ON_ICE, same effect — it cannot complete, so dependents wait forever until the job is taken off ice and eventually runs.
The difference: if you put a job ON_HOLD and it already satisfied its own conditions, it will run immediately on release — downstream jobs start soon. If you put it ON_ICE, the job still needs to wait for its next condition cycle, so downstream jobs stay waiting longer.
Debugging jobs that won't start — hold/ice troubleshooting
When a job doesn't start and you suspect a hold or ice status, follow these steps:
- Run
autorep -J jobnameand look for ST column — OH or OI indicates the job is held/iced. - Check the status of any parent box:
autorep -J boxname— if the box is OH/OI, inner jobs are blocked even if they look normal. - Review
sendeventhistory to see who set the hold/ice: check autorep logs or event trail. - If a box is held and you release it, inner jobs might start immediately based on their own conditions — be cautious.
To clear a hold: sendevent -E JOB_OFF_HOLD -J jobname To clear ice: sendevent -E JOB_OFF_ICE -J jobname
Batch job ran at 3 AM instead of 2 AM because of ON_ICE misuse
sendevent -E JOB_OFF_ICE -J daily_settlement
2. Force a one-time run using sendevent -E JOB_ON_HOLD? Not possible while on ice. Instead, after OFF_ICE, manually trigger the job with sendevent -E FORCE_STARTJOB -J daily_settlement (if allowed) or wait for next scheduled run.
3. The real fix: use ON_HOLD for manual-release scenarios; ON_ICE only for skipping a period.- ON_ICE does NOT run the job immediately on release even if the scheduled window is past.
- Always ask: do we want this job to run now (ON_HOLD) or next period (ON_ICE)?
- Train your team on the difference — it's the #1 AutoSys interview question for a reason.
Key takeaways
Common mistakes to avoid
4 patternsPutting a job ON_HOLD expecting it to wait until the next scheduled run
Putting a job ON_ICE when you need it to run manually after release
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
What is the difference between ON_HOLD and ON_ICE in AutoSys?
Frequently Asked Questions
JIL syntax, sendevent, autorep, box jobs, file watchers, scheduling, HA, security, cloud workload automation, and 22 interview questions — the definitive AutoSys reference for production engineers.
That's AutoSys. Mark it forged?
3 min read · try the examples if you haven't