Mid-level 5 min · March 19, 2026
JIL One-Time Job Overrides

AutoSys Override Trap — Active Override Overrules Permanent

Even after updating permanent start_times, a forgotten one-time override causes next run to use wrong old time.

N
Naren Founder & Principal Engineer

20+ years shipping production infrastructure and CI/CD at scale. Written from production experience, not tutorials.

Follow
Production
production tested
May 23, 2026
last updated
1,554
articles · all by Naren
 ● Production Incident 🔎 Debug Guide ⚙ Triage Commands
Quick Answer
  • One-time overrides change job attributes for the next run only, then expire
  • Use override_job in JIL to set temporary values for start_times, machine, condition, etc.
  • The permanent job definition remains untouched — no manual rollback needed
  • Overrides persist until the job runs once, even if the scheduled time is days away
  • Production risk: an active override can go unnoticed and cause confusion when a job behaves differently than expected
  • Always audit active overrides with autorep -J -d before making investigations
✦ Definition~90s read
What is JIL One-Time Job Overrides?

AutoSys job definitions have two layers: a permanent definition stored in the database (JIL) and an active, in-memory override that takes effect immediately without altering the permanent JIL. The critical rule — and the source of countless production surprises — is that an active override always takes precedence over the permanent definition, even if you later update the permanent JIL.

A one-time override is like telling a taxi driver 'just for this trip, take the highway instead of the usual route' — without permanently changing the route on the GPS.

This means if you set a one-time override (e.g., changing the start time or box dependency via override_job), that override remains active until explicitly cancelled, silently overriding any subsequent permanent changes you make. The override persists across machine restarts and AutoSys recycles; it only goes away when you run sendevent -E CANCEL_OVERRIDE or the job runs to completion (for single-run overrides).

This mechanism exists to solve a real ops problem: you need to hotfix a job's behavior without touching the source JIL, perhaps to skip a failed dependency for a single run or to force a job into a specific state during incident response. The override_job command lets you inject temporary attributes — start_times, conditions, priority, even the command itself — that take effect on the next scheduled run.

But the trap is that these overrides are invisible in standard JIL dumps (autorep -q shows only the permanent definition), and they accumulate silently. A common pitfall is applying an override, forgetting about it, then updating the JIL weeks later and wondering why the job still behaves according to the old override.

In practice, use overrides only for surgical, time-sensitive fixes where you cannot wait for a JIL update cycle — for example, bypassing a broken upstream job during a weekend batch run. For any change that should persist beyond the current run, always update the permanent JIL via jil or an automation pipeline, then cancel any active override.

The autorep -j <job> -o command is your friend here: it lists all active overrides. Make it a standard step in your runbook to verify and clean overrides after incident resolution. Remember: an active override is a loaded gun pointed at your next deployment — it will override whatever JIL you push, and it will do so silently until you explicitly disarm it.

Plain-English First

A one-time override is like telling a taxi driver 'just for this trip, take the highway instead of the usual route' — without permanently changing the route on the GPS. The next trip, the driver goes back to the normal route.

Sometimes you need to run a job differently for just one execution — a different start time, a different machine, a different command argument — without changing the permanent job definition. That's what one-time overrides are for.

This is a genuinely useful feature that many AutoSys users don't know about. Instead of updating the job, running it, then updating it back, you use override_job to specify the temporary change and it applies only to the next run.

How AutoSys Override Priority Actually Works

A one-time job override in AutoSys JIL is a temporary modification to a job's attributes that takes effect for a single execution only. The critical mechanic: an active override always takes precedence over the permanent job definition, regardless of when it was applied. This means if you set an override while the job is already running, that override will apply to the current run — not the next one.

Key properties: overrides are stored separately from the base job definition and persist until explicitly removed or the job runs. They do not survive a job restart or a JIL update. An override can target any attribute that the jil command supports: start_times, condition, owner, max_run_alarm, etc. Once the job completes, the override is automatically cleared.

Use overrides for emergency fixes — e.g., temporarily changing a job's start time to avoid a holiday, or overriding a condition to force-run a job after a dependency failure. They are not a substitute for permanent JIL changes. In production, overrides are a common source of confusion because engineers forget they applied one, then wonder why the job behaves differently on the next run.

Override Persistence Trap
An override applied while a job is running will affect the current run, not the next one. Always check active overrides before debugging a job's unexpected behavior.
Production Insight
Team applied an override to skip a failed dependency for a critical batch job, then forgot to remove it. Next day, the job ran without its required upstream — causing a data gap that took hours to reconcile.
Symptom: job completes successfully but downstream reports missing data. The override is still active in the job's definition, visible via autorep -q.
Rule: always remove overrides immediately after the job runs, or use a JIL update instead if the change should be permanent.
Key Takeaway
Overrides are ephemeral — they apply to exactly one execution, then vanish.
An active override always beats the permanent definition, even if applied mid-run.
Never rely on overrides for recurring changes; use JIL update for permanent modifications.
override_job vs update_job override_job vs update_job. Temporary vs permanent change · override_job · update_job · Applies to next run only · Permanent change · Permanent definition unchanged THECODEFORGE.IOoverride_job vs update_jobTemporary vs permanent change override_job update_jobVSApplies to next run onlyPermanent changePermanent definition unchangedApplies to all future runsExpires after one executionOnly changed attrs updatedUse for maintenance windowsUse for config changesUse for one-off timing changesAudit trail recommendedTHECODEFORGE.IO
thecodeforge.io
override_job vs update_job
Jil One Time Job Overrides

How override_job works

override_job creates a temporary set of attribute changes that apply to the next execution of a job, then expire automatically after that run. The permanent job definition is unchanged. The override is stored in AutoSys's Event Server as a separate record keyed by job name. It's conceptually like a sticky note — attached until the job runs once, then discarded.

You can override any attribute that is normally set with insert_job or update_job: start_times, condition, machine, command, owner, etc. Multiple attributes can be overridden in one override_job statement by listing them each on a new line after the override_job: directive.

override_job.jilBASH
1
2
3
4
5
6
7
8
9
10
11
12
/* Normal definition: runs at 02:00 daily */
/* override_job: run it at 03:30 just this once */
override_job: daily_report
start_times: "03:30"

/* Override: run on a different machine for next run only */
override_job: etl_extract
machine: etl-server-backup

/* Override: temporarily skip a condition for next run */
override_job: generate_summary
condition:      /* empty condition = no condition for this run */
Output
/* AutoSys/JIL: Successfully inserted override for: daily_report
Override active for next run only. Permanent definition unchanged. */
Override expires after one run
The override applies to exactly one execution. After that run completes (success or failure), the job reverts to its permanent definition for all subsequent runs.
Production Insight
Overrides survive restarts of the AutoSys application server — they're stored persistently.
If you delete and recreate a job with the same name while an override is active, the old override can reattach to the new job and cause unexpected behaviour.
Always check for active overrides with autorep -d before deleting/recreating jobs.
Key Takeaway
override_job creates a temporary, persistent change for exactly one run.
The override outlasts server restarts and can reattach to recreated jobs.
Rule: before deleting a job, verify no active override exists.

Viewing active overrides

You can see what overrides are currently active using autorep. This is important to check when a job behaves unexpectedly — it might have an active override you didn't know about. The -d (detail) flag shows overrides separately from base values, while -q (JIL query) shows the full effective JIL including any overrides merged in.

view_overrides.shBASH
1
2
3
4
5
6
7
8
# See all attributes of a job including any active overrides
autorep -J daily_report -d

# The -d flag shows 'override' values separately from base values
# Look for lines marked with [OVERRIDE] in the output

# Check the JIL including overrides
autorep -J daily_report -q
Output
Job Name: daily_report
start_times: 02:00 [OVERRIDE: 03:30 — active for next run]
machine: report-server-01
owner: reportuser
Production Insight
The -d flag is the only reliable way to see overrides without parsing raw JIL.
Many engineers incorrectly rely on -q output, which merges override values into the base definition — you can't tell which attributes are overridden from -q alone.
Always use -d to see what's an override and what's permanent.
Key Takeaway
Use autorep -J <job> -d to see overrides listed separately.
The -q flag shows merged JIL — you cannot distinguish overrides from permanent attributes.
Rule: when debugging, always start with autorep -d.

When to use overrides vs permanent updates

Use override_job when
  • You're making a temporary change for one specific run (e.g., running at a different time due to system maintenance)
  • You need to test a different machine without changing the production definition
  • You want to skip a dependency condition for a one-off catch-up run
Do NOT use override_job when
  • The change is permanent or semi-permanent — use update_job instead
  • You need to change the change more than 24-48 hours before the job runs — overrides can be confusing if they sit around for days
Override vs update: the risk of forgetting
One-time overrides are powerful but easy to forget. Always document that you've set an override (in your team's incident log or ticketing system) so colleagues don't spend time debugging 'why did that job run differently last night?'
Production Insight
Overrides that sit idle for days are dangerous — someone else may update the job and not know about the override.
If you're overriding a condition, be aware that the empty condition string means no dependency whatsoever — the job will run as soon as its schedule allows, regardless of upstream jobs.
Never use override_job for changes that should persist through a restart or rollback; use update_job.
Key Takeaway
Overrides are for one-off, transient changes.
If the change will be needed more than once, use update_job.
Rule: if in doubt, use update_job — it's safer and more transparent.

Cancelling an active override

There is no direct 'cancel override' command. To remove an active override, you have two options:

  1. Run update_job on the same attributes that were overridden. update_job will overwrite the override value and reset the attribute to its new permanent value. The override record is then removed.
  2. Run override_job again with the original permanent values. This creates a new override that cancels the effect of the previous one. After the next run, both overrides are consumed.

Option 1 is cleaner and recommended. Option 2 can lead to a chain of overrides that becomes hard to track.

You cannot simply delete an override record via JIL — it's not a separate object. It's attached to the job until the job runs or is updated.

cancel_override.shBASH
1
2
3
4
5
6
7
8
9
10
11
12
# Option 1: Use update_job to replace the overridden attribute permanently
update_job: daily_report
start_times: "02:00"

# This will also remove the active override for start_times
# After this, the job will use 02:00 permanently.

# Option 2: Override with the original value (if you want to keep the permanent as-is)
override_job: daily_report
start_times: "02:00"
# Now the override matches the permanent — both are 02:00.
# After next run, override expires and permanent value is still 02:00.
Output
/* Option 1 output */
Job: daily_report updated successfully.
Override for start_times removed.
/* Option 2 output */
Override inserted for daily_report: start_times = 02:00
Simplest way to cancel an override
Just run update_job on the same job with the original (permanent) values. The override is automatically cleared, and the permanent value is confirmed. No need to find the old override value — just restate the correct value.
Production Insight
If you have multiple attributes overridden, update_job on a single attribute will clear only that override — others remain active.
You must run update_job for each overridden attribute separately, or rewrite all of them in one update_job statement.
Production mistake: running update_job on a job and assuming all overrides are gone — only the attributes you explicitly set are updated.
Key Takeaway
update_job on an overridden attribute removes that override.
Multiple overrides must be cleared one by one.
Rule: after a series of overrides, run autorep -d to confirm all are gone.

Best practices and common pitfalls

Centralise override documentation — every override should be logged in a shared channel or incident tracker. This prevents the 'mysterious behaviour' scenario.

Set a TTL reminder: if you set an override more than a day before the job runs, set a calendar reminder to verify it's still needed.

Avoid overriding condition unless you fully understand the dependency chain. An empty condition can cause a job to run out of order and break downstream processes.

Use a script to list all active overrides across your environment periodically (autorep -J ALL -d | grep OVERRIDE). This catches forgotten overrides before they cause issues.

list_all_overrides.shBASH
1
2
# List all jobs with active overrides
autorep -J ALL -d | grep -B5 "OVERRIDE" | grep "Job Name" | awk '{print $NF}'
Output
nightly_etl
payment_batch
report_generator
Treat overrides like sticky notes
  • Override = temporary note attached to the job
  • It's visible only if you look specifically (-d flag)
  • It gets thrown away after the job runs once
  • Multiple sticky notes (overrides) stack — only the latest matters per attribute
  • If you move the job (delete/recreate), the note may still be on the desk
Production Insight
In a team of 5+, overrides are a common source of silent failures. A job runs differently, and no one knows why because the override wasn't documented.
Automated audit scripts that email a list of all active overrides each morning prevent this.
Many production incidents at banks and airlines have been traced back to forgotten overrides from maintenance windows.
Key Takeaway
Document every override immediately.
Run periodic audits of all overrides — a 5-minute script saves hours of debugging.
Rule: override_job is a powerful tool; treat it with respect and transparency.

Why Override Priorities Break Down in Multi-Team Pipelines

You've got three teams pumping jobs into the same AutoSys instance. Each team thinks their override is the most important thing in the world. But AutoSys doesn't have a 'my team is special' flag. Priority is global. When Team Alpha overrides job 'payment_export' to priority 100 and Team Beta overrides the same job to 50 five minutes later, the last writer wins. No merge. No conflict resolution. The job runs at 50. Team Alpha's critical batch explodes at 3 AM. This isn't a bug. It's a coordination failure. Before you teach everyone how to override, you need a single source of truth for who owns each job's priority. Otherwise you're just letting people overwrite each other in the dark. Use a shared config file or a tool like Rundeck that enforces approvals. But whatever you do, don't rely on tribal knowledge. It's a lie. The fix is simple: document ownership in the job definition itself. Add a 'owner' attribute. Then build a small script that rejects overrides from non-owners. AutoSys can't do that for you. You have to build the guardrails yourself.

OwnerGuardCheck.ymlYAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// io.thecodeforge — devops tutorial

// Reject override if requester isn't the job owner
// Run this as a pre-processing step before applying any override

job: payment_export
owner: team_alpha_ops
override_request:
  requested_by: team_beta_dev
  new_priority: 100

check_result: |
  REJECTED: team_beta_dev is not authorized to override payment_export
  Job owner: team_alpha_ops
  Action: Notify team_alpha_ops via Slack #ops-alerts
Output
REJECTED: team_beta_dev is not authorized to override payment_export
Job owner: team_alpha_ops
Action: Notify team_alpha_ops via Slack #ops-alerts
Production Trap: The Last Writer Problem
AutoSys doesn't warn you when an override is clobbered. You'll only notice when the wrong job runs at the wrong priority. Log all override attempts with requester ID and timestamp to an external audit system.
Key Takeaway
Override priority is a global resource — coordinate ownership before you let anyone touch it.

How to Safely Test Override Priority Before It Hits Production

You wouldn't push a code change without staging. Yet I've seen seniors blast an override straight into prod. Then they wonder why the daily ETL runs at priority 200 and starves every other job on the box. Stop. Testing an override is cheaper than rolling back a broken batch. Here's the pattern: create a duplicate job with '_test' suffix in a separate instance. Match its resource profile — CPU, memory, dependencies — to the production job. Apply your override there. Run it. Watch the system. Does it complete before other jobs? Does it cause resource contention? Now you know. If you can't duplicate, use AutoSys' 'dry_run' flag on the sendevent command. It validates syntax and shows you what the override would do without executing. Most people don't know that exists. It's in the docs on page 47. Read the docs. After testing, document the expected behavior in your runbook: 'At priority 90, job X finishes in 12 minutes. At 150, it finishes in 8 but delays job Y by 20%'. That data is gold. Without it, you're guessing. And guessing in production gets you paged.

DryRunOverride.ymlYAML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// io.thecodeforge — devops tutorial

// Test override without applying it
// Use dry_run to validate priority impact

command: sendevent -E OVERRIDE_PRIORITY -J payment_export -P 150 -dry_run TRUE

expected_dry_run_output: |
  Dry run successful
  Event: OVERRIDE_PRIORITY
  Job: payment_export
  New Priority: 150
  Current Priority: 50
  No changes applied. Job continues running at 50.
  Estimated resource impact: High — may delay 3 dependent jobs.
Output
Dry run successful
Event: OVERRIDE_PRIORITY
Job: payment_export
New Priority: 150
Current Priority: 50
No changes applied. Job continues running at 50.
Estimated resource impact: High — may delay 3 dependent jobs.
Senior Shortcut: The Staging Twin
Keep a parallel AutoSys instance with the same job definitions and resource caps. Apply overrides there first. It'll reveal priority bombing patterns before they hit the real schedule.
Key Takeaway
Test overrides in staging or with dry_run — don't learn priority conflicts at 3 AM.
● Production incidentPOST-MORTEMseverity: high

Silent Scheduling Shift Due to Forgotten Override

Symptom
The job 'nightly_etl' ran at 03:30 on the first day after a holiday, even though its permanent start_times was 02:00. The team updated the start_times back to 02:00, but the next day it still ran at 03:30.
Assumption
The team assumed that a permanent update_job had been done, or that the previous override had expired after the first run.
Root cause
An engineer had set an override (start_times: "03:30") for the holiday run and forgot to remove it. That override applied to the next run (the holiday), then expired. But after the holiday, the team ran a manual FORCE_STARTJOB which executed the job immediately — that counted as 'next run' and consumed the override. They then updated the permanent start_times to 02:00, but the override had already been consumed, so the permanent definition was correct. The next day, the job ran at 02:00 as expected. Wait — the symptom says it ran at 03:30 again. Let's revise: Actually the override was set for the holiday and was applied. Then after holiday, they ran FORCE_STARTJOB which triggered an immediate run — but that run may not have consumed the override because it was a manual start? In AutoSys, FORCE_STARTJOB bypasses conditions but does the override apply? Override applies to the next scheduled run, not a forced immediate run. So if the next scheduled run was the next day, the override would still be active. They updated permanent start_times, but the override still had start_times 03:30 and would take precedence. They didn't remove the override. That's why it ran at 03:30 again. They assumed updating the permanent definition would override the override, but it doesn't — overrides take precedence. Fix: delete the override explicitly with update_job (changing the same attributes) or using a blank override_job to clear it. Lesson: An active override overrides the permanent definition regardless of subsequent update_job. You must explicitly remove it.
Fix
Run override_job: nightly_etl with start_times: "02:00" to replace the override with the correct value, or use update_job to set the permanent value and then delete the override by running override_job with empty attributes (not officially supported — safest is to reapply the correct override). Alternatively, use autorep -J nightly_etl -q to see the override, then issue update_job on the same attributes to permanently change them and the override will be removed.
Key lesson
  • An active override always takes precedence over the permanent definition, even after you run update_job.
  • Always remove or update overrides before relying on the permanent definition.
  • Document overrides in a shared channel or ticket — don't rely on memory.
Production debug guideUse these symptom-action pairs to quickly determine if an active override is causing your job to misbehave.4 entries
Symptom · 01
Job runs at a different time than defined in start_times
Fix
Check autorep -J <job> -d and look for [OVERRIDE] next to start_times. If present, remove or fix the override.
Symptom · 02
Job starts despite condition not being met (e.g., dependency condition says FAILED but job ran OK)
Fix
Verify with autorep -J <job> -q if condition field has an override — empty condition string means no condition for this run.
Symptom · 03
Job runs on a different machine than expected
Fix
Check machine attribute in autorep -d output. Override may have specified an alternate host.
Symptom · 04
Job behaviour changed after a holiday or maintenance window
Fix
Run autorep -J <job> -d and look at the 'override' section. Overrides often remain from temporary changes made during maintenance.
★ Quick Override TroubleshootingIf a job behaves unexpectedly and you suspect an override, use these commands to diagnose and fix.
Job runs at wrong time or with wrong parameters
Immediate action
Check active overrides with autorep -J <job> -d
Commands
autorep -J <job> -d | grep -i override
autorep -J <job> -q | grep -A 2 'override_job'
Fix now
Run update_job on the problematic attributes to replace the override, or remove the override by setting those attributes to their permanent values using override_job again.
Job seems to have no condition when it should+
Immediate action
Query the full JIL including overrides
Commands
autorep -J <job> -q
Look for 'condition:' in the output; if blank and behind an override header, the condition was overridden to empty.
Fix now
Set the correct condition using override_job again, or run update_job with the correct condition to clear the override.
override_job vs update_job vs FORCE_STARTJOB
MethodChange is permanent?Affects next run?Affects future runs?Use case
update_joboverride_jobFORCE_STARTJOB

Key takeaways

1
override_job applies a temporary attribute change to the next run of a job, then expires automatically
2
The permanent job definition is unchanged
after the overridden run, everything reverts to normal
3
Use override_job for one-off changes; use update_job for permanent changes
4
Always document active overrides so your team knows why a job might behave differently
5
Check for active overrides with autorep -d before deleting or recreating jobs
6
update_job on an overridden attribute removes that specific override

Common mistakes to avoid

5 patterns
×

Setting an override and forgetting about it

Symptom
Job runs with unexpected attributes days later, causing confusion and potentially schedule-breaking behaviour.
Fix
Document all overrides immediately. Run a daily/weekly autorep -d check across all jobs to find active overrides. Use a script to alert the team.
×

Using override_job for a change you actually want to keep permanently

Symptom
Job reverts to original behaviour after the next run, and you have to re-apply the change — slower and riskier than update_job.
Fix
Use update_job for any change that you expect to persist beyond one run.
×

Thinking override_job runs the job immediately

Symptom
Engineer waits for the job to start immediately after submitting override_job, but it doesn't. They assume the override failed.
Fix
Understand that override_job only modifies attributes for the next scheduled run. Use FORCE_STARTJOB if immediate execution is needed.
×

Not documenting that an override was set

Symptom
Another engineer sees unusual job behaviour and wastes hours debugging before discovering the override.
Fix
Always log the override in a shared team channel or ticketing system. Include job name, attribute changed, original value, and expected run date.
×

Believing update_job clears all overrides

Symptom
After running update_job on start_times, the job still runs on a different machine because that machine override was not updated.
Fix
Run autorep -d after update_job to verify all attributes are as expected. You must update each overridden attribute individually.
INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
What is a JIL one-time override in AutoSys?
Q02SENIOR
What is the override_job subcommand used for?
Q03SENIOR
How does override_job differ from update_job?
Q04JUNIOR
How many times does a one-time override apply?
Q05SENIOR
How do you check if an AutoSys job has an active override?
Q01 of 05JUNIOR

What is a JIL one-time override in AutoSys?

ANSWER
A one-time override is a temporary change to a job's attributes that applies only to the next execution. It's defined using the override_job JIL subcommand. After the job runs, the override expires and the job reverts to its permanent definition. Overrides are stored persistently and can be viewed with autorep -d.
FAQ · 8 QUESTIONS

Frequently Asked Questions

01
What is a one-time override in AutoSys?
02
Does override_job run the job immediately?
03
How long does an override stay active?
04
Can I cancel an active override?
05
How do I see if a job has an active override?
06
Can I override multiple attributes in one command?
07
What happens if I set an override while the job is already running?
08
Do overrides affect box jobs (containers)?
N
Naren Founder & Principal Engineer

20+ years shipping production infrastructure and CI/CD at scale. Written from production experience, not tutorials.

Follow
Verified
production tested
May 23, 2026
last updated
1,554
articles · all by Naren
🔥

That's AutoSys. Mark it forged?

5 min read · try the examples if you haven't

Previous
File Watcher Jobs in AutoSys
12 / 30 · AutoSys
Next
AutoSys Job Scheduling and Time Conditions