AutoSys DST Failures — Why 02:10 Jobs Silently Skip
AutoSys silently skips jobs when 02:10 doesn't exist during DST spring-forward — no error, no alert.
20+ years shipping production infrastructure and CI/CD at scale. Everything here is grounded in real deployments.
- ✓Basic programming fundamentals
- ✓A computer with internet access
- ✓Willingness to follow along with examples
- Cron is a simple time-based scheduler with no dependencies or central monitoring
- AutoSys adds job chaining, retries, and enterprise alerting via JIL definitions
- Control-M offers similar features with a more modern UI and stronger cloud integration
- AutoSys and Control-M share core concepts; learning one transfers quickly
- For 10+ machines or 50+ jobs, enterprise tools pay back in reduced incident response time
AutoSys, Cron, and Control-M are job scheduling systems that automate the execution of scripts, programs, and workflows on a time-based or event-driven basis. Cron is the simplest, a Unix daemon that runs jobs at fixed times, dates, or intervals—perfect for lightweight, single-server tasks like log rotation or nightly backups, but it lacks dependency management, retry logic, or centralized monitoring.
AutoSys (from CA/Broadcom) and Control-M (from BMC) are enterprise-grade schedulers designed for complex, multi-step workflows across distributed systems, with features like cross-server dependencies, calendar-based scheduling, and failure handling. Apache Airflow is a modern, open-source alternative that treats workflows as code (Python DAGs), offering dynamic pipeline generation, rich UI, and cloud-native integration—ideal for data engineering but overkill for simple cron jobs.
The key distinction: Cron is a local tool for trivial tasks; AutoSys and Control-M compete on enterprise reliability and compliance; Airflow excels in data pipeline orchestration. Choosing wrong—like using Cron for a multi-server batch job or AutoSys for a single script—leads to silent failures, like the DST bug where jobs scheduled at 02:10 vanish because the clock jumps forward, a problem that AutoSys handles with calendar rules but Cron ignores entirely.
Cron is like a basic alarm clock — it rings at the time you set, that's it. AutoSys is like a smart home system — everything talks to each other, if one thing goes wrong it alerts you, and you control it all from a central app. Control-M is a competing smart home system with a slightly different remote control.
When someone asks 'should we use AutoSys or cron?' the answer is almost always: it depends on scale and complexity. Both are legitimate tools for the right situation. The more interesting question is AutoSys vs Control-M — two enterprise-grade workload automation platforms that compete head-to-head in the market.
This article gives you an honest comparison so you can have informed conversations in interviews, architecture discussions, or when your team is evaluating tools.
Why AutoSys, Cron, and Control-M Are Not Interchangeable
AutoSys, Cron, and Control-M are job schedulers, but they differ fundamentally in how they handle time. Cron is a simple time-based trigger: it runs a command when the system clock matches a pattern. AutoSys and Control-M are enterprise schedulers that add dependency chains, event triggers, and calendar logic. The critical distinction is that Cron has no concept of job state or failure recovery — it fires and forgets. AutoSys and Control-M track job runs, retries, and alerts, but they also introduce complexity around daylight saving time (DST) transitions. In practice, Cron is O(1) per job — stateless and predictable. AutoSys and Control-M maintain a job database and evaluate conditions before launching, which means a job scheduled at 02:10 during a DST spring-forward can be silently skipped if the scheduler's internal clock jumps from 02:00 to 03:00. The scheduler sees the trigger time never arrived and logs nothing.
Cron: still the right tool for simple jobs
Cron is the Unix time-based job scheduler built into every Linux server. It's been there since 1975 and for simple time-based execution of a single script on a single machine, it's still perfectly fine.
- Simple time-based scripts (rotate logs at midnight, run a backup at 2 AM)
- Developer machines and small servers where job complexity is low
- Quick prototyping before building out a proper AutoSys definition
- No dependency management (run B only if A succeeded)
- No centralised visibility across servers
- No built-in alerting when jobs fail
- No audit trail
- No way to see all running jobs across the enterprise from one place
If you need to run 10 unrelated scripts on 2 servers, use cron. If you need to orchestrate 500 interdependent jobs across 100 servers, use AutoSys.
# ── CRON: simple time-based, no dependencies ────────────────── # In /etc/crontab or crontab -e: # Run at 2 AM daily — no awareness of other jobs 0 2 * * * /opt/scripts/generate_report.sh # ── AUTOSYS JIL: same job, but with dependency + alerting ────── insert_job: generate_report job_type: CMD command: /opt/scripts/generate_report.sh machine: prod-server-01 owner: batchuser date_conditions: 1 days_of_week: all start_times: "02:00" condition: success(extract_data_job) # won't run until this succeeds alarm_if_fail: 1 # alerts ops team on failure n_retrys: 2 # retry twice before failing
&& between commands, you've built a dependency chain that needs proper tooling.AutoSys vs Control-M: the real enterprise competition
AutoSys (Broadcom) and Control-M (BMC) are the two dominant enterprise workload automation platforms. They are remarkably similar in capabilities — both handle multi-platform scheduling, dependency management, visual monitoring, high availability, and integrations with SAP, Oracle, and cloud platforms.
The honest truth: if you've used one, you can learn the other in a few weeks. The core concepts (job dependencies, job types, status monitoring) are identical. The syntax and UI differ.
- Market position: AutoSys has historically dominated financial services; Control-M has stronger presence in manufacturing and retail
- UI: Control-M's UI is generally considered more modern and intuitive
- Pricing model: Both are expensive enterprise licences; pricing varies significantly by deployment size
- Cloud-native support: Both have added cloud and container integrations, but the implementation details differ
- Migration tooling: If you're already on one, switching to the other is a significant project
AutoSys vs Cron
How each scheduler handles daylight saving time transitions.
AutoSys
Enterprise workload automation
Cron
Unix-native time-based scheduler
Apache Airflow: the modern alternative for data pipelines
Apache Airflow deserves a mention because it's increasingly common in data engineering roles and sometimes positioned as an AutoSys replacement for data pipeline workflows.
Airflow is open-source, Python-based, and excellent for DAG (Directed Acyclic Graph) workflows — think ETL pipelines, ML training pipelines, data transformation chains.
But Airflow and AutoSys target different audiences. Airflow is built by developers for developers. AutoSys is built for enterprise operations teams managing heterogeneous job environments across many servers and applications. If your team writes Python and your jobs are all data pipelines, Airflow might be the right tool. If your team manages a mix of legacy scripts, SAP jobs, Oracle procedures, and mainframe file transfers, AutoSys is more appropriate.
- Airflow is a DAG scheduler — it knows the order but not the machines or run conditions.
- AutoSys is a workload automation platform — it knows where, when, and under what conditions to run.
- A common hybrid pattern: Airflow triggers AutoSys jobs for legacy systems, AutoSys runs the actual scripts.
Migrating Between Schedulers: Hidden Costs and Traps
Switching from one enterprise scheduler to another is rarely a simple project. The job definitions (JIL for AutoSys, XML/JSON for Control-M) are not directly convertible, and the agents must be reinstalled and reconfigured on every machine.
- Job definition volume: 5,000+ job definitions to convert, each with specific dependencies and conditions
- Agent deployment: every server needs the new agent installed, configured, and tested
- Downtime windows: batch windows are tight; migration must be phased and reversible
- Operator retraining: even if concepts are similar, muscle memory differs
Practical approach: Run both schedulers in parallel for a pilot set of jobs. Migrate incrementally by business domain, not by technical wave. Use a wrapper layer if needed to translate conditions between old and new systems.
Cloud-Native Job Scheduling: Where the Industry Is Going
Both AutoSys and Control-M have invested heavily in cloud-native capabilities over the past five years. AutoSys now supports AWS, Azure, and GCP as execution targets, with agents that can be deployed in containers or Kubernetes. Control-M has similar cloud offerings, with tighter integration into cloud-native monitoring and CI/CD pipelines.
However, cloud-native job scheduling is still maturing. Kubernetes-native alternatives like Argo Workflows, Kueue, and Google Cloud Workflows are gaining traction, especially for teams already committed to cloud platforms.
The question is not 'can the scheduler run in the cloud' but 'how well does it handle ephemeral infrastructure and dynamic scaling.' Traditional schedulers assume fixed server lists; cloud-native ones treat infrastructure as disposable. If your batch jobs run mostly in VMs, AutoSys/Control-M adapt well. If you're running container-based data pipelines, consider a cloud-native tool.
The Monitoring Blind Spot: Why Your Scheduler Doesn't Alert You Correctly
Every scheduler claims it can alert. Cron mails you. AutoSys has events. Control-M has notifications. And they all lie to you just when you need them most. The real problem isn't sending an alert. It's knowing whether the alert actually fired, and whether the job that triggered it ran at all. I've debugged production outages where AutoSys showed a job as 'SUCCESS' while the actual process had been dead for six hours. The scheduler checked the PID, found it running, and marked completion on exit. Except the exit was a kill -9 from OOM, and the data was already corrupted.
Your monitoring must decouple job status from job outcome. A SQL agent that connects to the database and returns zero rows is not 'success.' It's a silent failure. Treat it as one. Build a heartbeat check that validates business logic, not just process exit codes. And never, ever rely on the scheduler's built-in alerts alone. They are optimized for uptime reports, not for catching your pipeline vomiting garbage into production for three hours while you're asleep. Add external monitoring. Add dead-man switches. Add a second system that checks whether the first system is lying to you.
// io.thecodeforge — devops tutorial // Dead-man switch: external cron checks scheduler's heartbeat // Runs independently on a separate VM. No shared dependencies. apiVersion: v1 kind: ConfigMap metadata: name: deadman-check namespace: production data: heartbeat_job: | # Checks AutoSys agent 'prod-agent-01' every 2 minutes # If agent fails to respond, pagerduty gets notified name: HEARTBEAT_CHECK command: | ssh prod-agent-01 'ps aux | grep -c "[j]ob-executor"' failure_action: PAGERDUTY_NOTIFY retry: 2 interval=30s notification: 'AutoSys agent is unresponsive — possible split-brain' business_logic_check: | # Validates latest ETL output is non-empty name: ETL_VALIDATION command: | rows=$(psql -h dw-cluster -c "SELECT count(*) FROM daily_finance WHERE ingest_date = current_date" -t) if [ "$rows" -lt 1 ]; then exit 1; fi failure_action: PAGERDUTY_NOTIFY retry: 0 notification: 'Finance ETL returned zero rows — data corruption likely'
Dependency Hell: When Your Job Graph Eats Itself
Cron has no dependencies. AutoSys and Control-M let you build DAGs. Everyone loves DAGs until a diamond dependency deadlocks production at 3 AM. The most common mistake I see is building implicit dependencies — Job C waits for Job B, Job B waits for Job A, but nobody checked that Job A also triggers Job D which polls the same database table. Now two different dependency chains are fighting for the same row lock, and your scheduler doesn't know. It thinks everything is fine because the condition on the job definition is 'previous job completed.' Not 'previous job completed AND resource is available.'
The fix is brutal but necessary: every job that touches shared state must explicitly declare a resource lock. AutoSys calls this resource-based scheduling. Control-M calls it pool-based concurrency. Use it. Otherwise you're playing roulette with your job graph. I've seen a 300-node dependency tree collapse because a single file transfer job held a lock on a staging directory that twelve downstream jobs needed. The scheduler dutifully ran all twelve in parallel, all twelve hit a 'file not found' race condition, and all twelve retried simultaneously, amplifying the failure by an order of magnitude.
Rule of thumb: if your dependency graph has more than three levels of depth and any two paths converge on the same resource, you need explicit resource locking. Not conditional logic. Not retries. Lock it or lose it.
// io.thecodeforge — devops tutorial // Explicit resource lock prevents dependency collision // AutoSys JIL equivalent using minJobResource resource_definition: name: STAGING_DIR_LOCK type: semaphore max_count: 1 release_on: job_end job_definition: name: PROCESS_DAILY_TRANSACTIONS condition: success(EXTRACT_PAYMENTS) resource: STAGING_DIR_LOCK command: | python3 /opt/etl/ingest.py --source s3://finance-raw/ --target /staging/daily/ max_run_alarm: 3600 failure_action: HOLD # don't let downstream jobs retry into the same deadlock
Midnight Batch Failure After Daylight Saving Time Change
- Never assume enterprise schedulers handle time zone transitions automatically — test DST boundaries in your job definitions.
- Every production job should have alarm_if_fail enabled; silent failures are more dangerous than noisy alarms.
- Use UTC for all job schedules and convert to local time only for display purposes.
autorep -j jobname -q | grep condition. Verify all dependencies are met. If a parent job is in 'Success' but child does not run, the condition may have timed out.sendevent -E CHANGE_STATUS -j jobname -s ON_ICE to pause and then update the job definition.autosyslog -j jobname for STDOUT/STDERR. Compare with expected output. Common cause: environment variables differ between interactive shell and AutoSys agent.ctm_agent start. If frequent, check network connectivity and agent logs.autorep -j jobname -q | grep -E 'start_times|days_of_week|run_calendar'sendevent -E FORCE_START -j jobnamesendevent -E CHANGE_STATUS -j jobname -s ACTIVATED.autorep -j parent_job -w | grep -E 'Status|Last Start'autosyslog -j parent_job | tail -20sendevent -E FORCE_START -j parent_job. Then the child will automatically trigger if the condition is success(parent_job).ssh agent_host 'ps aux | grep jobname'autorep -j jobname -w | grep -E 'PID|Status'sendevent -E KILLJOB -j jobname. Then restart after manual intervention.| Feature | Cron | AutoSys | Control-M | Apache Airflow |
|---|---|---|---|---|
| Job dependencies | None | Full chains (condition keyword) | Full chains (GUI-based) | Full DAG support (Python) |
| Central visibility | No | Yes (WCC UI) | Yes (web console) | Yes (web UI + logs) |
| Enterprise integrations (SAP, Oracle, Mainframe) | None | Yes (via agents) | Yes (certified connectors) | Via custom operators (requires Python) |
| Language for job definitions | Shell/crontab syntax | JIL (AutoSys-specific DSL) | XML/JSON + GUI | Python DAGs |
| Primary audience | Sysadmins | Enterprise Ops | Enterprise Ops | Data Engineers |
| Cost | Free | Enterprise licence (per agent/CPU) | Enterprise licence (per agent/CPU) | Free (open source) |
| Learning curve | Low | Medium | Medium | Medium-High (Python needed) |
| Cloud-native support | Minimal (via cron in containers) | Agents for AWS/Azure/GCP, container support | Agents for cloud, Kubernetes operator | Native Kubernetes executor, cloud operators |
| Alerting and monitoring | None built-in | alarm_if_fail, email, SNMP | Built-in alerts, integration with PagerDuty | Email, Slack, webhooks (via plugins) |
| File | Command / Code | Purpose |
|---|---|---|
| cron_vs_jil_example.sh | 0 2 * * * /opt/scripts/generate_report.sh | Cron |
| DeadManSwitch.yml | apiVersion: v1 | The Monitoring Blind Spot |
| ResourceLock.yml | resource_definition: | Dependency Hell |
Key takeaways
Common mistakes to avoid
5 patternsUsing cron for enterprise batch jobs with dependencies
success() in JIL to enforce dependency.Treating AutoSys and Control-M as completely different tools
Recommending Airflow for teams without Python expertise
Choosing a scheduler based on features alone, ignoring existing ecosystem
Failing to set alarm_if_fail on all production jobs
Interview Questions on This Topic
What are the main differences between AutoSys and cron?
How does AutoSys compare to Control-M?
When would you choose cron over AutoSys for a job scheduling task?
What is Apache Airflow and how does it differ from AutoSys?
What factors would you consider when choosing a job scheduler for a new enterprise environment?
Frequently Asked Questions
Cron is a simple time-based scheduler with no dependency management, no central visibility, and no built-in alerting. AutoSys provides all of these, plus multi-server orchestration, job dependency chains, audit trails, and enterprise HA capabilities.
Neither is definitively better — they have very similar capabilities. AutoSys has traditionally dominated financial services; Control-M has a stronger footprint in manufacturing and retail. The choice is usually driven by existing vendor relationships and organisational preference.
Yes. AutoSys can manage any job that cron manages, plus far more. Many organisations migrate critical cron jobs to AutoSys for better monitoring and dependency management. AutoSys even includes a cron2jil utility to help convert crontab entries to JIL format.
Partially. Airflow is excellent for data pipeline orchestration and is popular with data engineering teams. However, it requires Python expertise and is less suited to heterogeneous enterprise environments with legacy systems, SAP, Oracle procedures, and file-based integrations.
cron2jil is an AutoSys utility that converts crontab entries into JIL format. It's useful when migrating existing cron jobs into AutoSys. Run cron2jil -f your_crontab_file to generate the equivalent JIL definitions.
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.
20+ years shipping production infrastructure and CI/CD at scale. Everything here is grounded in real deployments.
That's AutoSys. Mark it forged?
5 min read · try the examples if you haven't