-
Notifications
You must be signed in to change notification settings - Fork 15
Scheduled Tasks
Some things in FreeITSM cannot happen while somebody is looking at a screen. An SLA breaches at 3am. A contract expires in 30 days. A developer comments on a Jira issue and nobody is watching. For those, FreeITSM needs a small job that wakes up on a timer.
None of them are set up for you. A fresh install has no scheduled tasks at all, and the features that depend on them fail silently β nothing errors, nothing appears in a log, the feature simply never happens. This page lists every one, what breaks without it, and how to set it up on Windows and Linux.
β οΈ Silent is the important word. A tracker whose status never changes looks exactly like a tracker where nothing has happened. An SLA that never breaches looks like good service. If a time-based feature "doesn't seem to work", check this page first.
| Job | What it does | What breaks without it | Suggested interval |
|---|---|---|---|
cron/integration_poll.php |
Asks Jira (and other issue trackers) what has changed | Issue status never updates and comments never come back β see Issue trackers | every 5 minutes |
cron/sla_breach_check.php |
Checks open tickets against their SLA targets | SLA warning and breach notifications are never sent | every 5 minutes |
cron/webhook_deliveries.php |
Delivers queued outbound webhooks, with retries | Webhooks fired by workflows sit in the queue and never send | every 1 minute |
cron/workflow_scheduled.php |
Fires time-based workflow triggers | Rules like "this contract expires in 30 days" never run | every 5 minutes |
Each also has its own detailed setup document in the docs/ folder of the application: integration-poll-cron-setup.md, sla-cron-setup.md, webhook-cron-setup.md and workflow-scheduled-cron-setup.md.
Only the ones matching the features you use. If you have no issue tracker connected, the tracker poll does nothing useful. If you have never written a workflow, the scheduled-workflow job has nothing to fire. If in doubt, set up all four β an unused job costs a second of CPU and prints one line saying it had nothing to do.
Run these in a Command Prompt opened as Administrator. Adjust the two paths if your PHP or FreeITSM lives elsewhere.
schtasks /create /tn "FreeITSM Tracker Poll" /tr "C:\wamp64\bin\php\php8.4.0\php.exe C:\wamp64\www\freeitsm-app\cron\integration_poll.php" /sc minute /mo 5 /ru SYSTEM
schtasks /create /tn "FreeITSM SLA Breach Check" /tr "C:\wamp64\bin\php\php8.4.0\php.exe C:\wamp64\www\freeitsm-app\cron\sla_breach_check.php" /sc minute /mo 5 /ru SYSTEM
schtasks /create /tn "FreeITSM Webhooks" /tr "C:\wamp64\bin\php\php8.4.0\php.exe C:\wamp64\www\freeitsm-app\cron\webhook_deliveries.php" /sc minute /mo 1 /ru SYSTEM
schtasks /create /tn "FreeITSM Scheduled Workflows" /tr "C:\wamp64\bin\php\php8.4.0\php.exe C:\wamp64\www\freeitsm-app\cron\workflow_scheduled.php" /sc minute /mo 5 /ru SYSTEM
-
If either path contains a space, the command above will fail. Put the whole thing in a
.batfile and point the task at that instead β far easier than fightingschtasksquoting. -
/ru SYSTEMtasks are invisible to a normal user. Task Scheduler run without elevation will not list them, and neither will PowerShell'sGet-ScheduledTask. Open Task Scheduler as administrator to see them. A task you cannot see is not necessarily a task that does not exist. -
Last Run Resultof0x41303means "has not run yet" β normal for a task you have just created. It should become0x0after its first run. - Check the task is Enabled, not merely present. A disabled task sits in the list looking perfectly healthy.
*/5 * * * * /usr/bin/php /var/www/freeitsm-app/cron/integration_poll.php >/dev/null 2>&1
*/5 * * * * /usr/bin/php /var/www/freeitsm-app/cron/sla_breach_check.php >/dev/null 2>&1
* * * * * /usr/bin/php /var/www/freeitsm-app/cron/webhook_deliveries.php >/dev/null 2>&1
*/5 * * * * /usr/bin/php /var/www/freeitsm-app/cron/workflow_scheduled.php >/dev/null 2>&1
Drop the >/dev/null while you are testing, so cron emails you the output.
Useful for testing, or before you have set the schedule up. From the application folder:
php cron/integration_poll.php
Each job prints what it did. The tracker poll, for example:
Jira checked 1, changed 0
comments: 1 seen, 1 imported
The most reliable test is not "does the task exist" but "did something happen that only the job could have caused".
- Tracker poll β change an issue's status in Jira, wait for two intervals, and see whether the pill on the linked ticket follows.
- Webhooks β fire a workflow that sends one, then check the delivery queue empties.
- SLA β the notification arrives, or it does not.
π‘ Each job refuses to run more often than a minimum interval, and each connection has its own interval too. So running a job twice in quick succession may print "No connections due" or "Rate limited". That is the job protecting itself, not a fault β wait and run it again.
Worth knowing, so you do not go looking for a job that does not exist β or create one that should not.
- Incoming email. Mailboxes are checked by the browser while an analyst has the ticket list open, not by a scheduled job. Mail therefore arrives when somebody is working, which is usually what you want, but it does mean nothing is collected overnight with every browser closed.
- Snoozed tickets waking up. There is no job. A snoozed ticket reappears because the snooze time has passed β it is read from the clock whenever the folder is drawn.
-
InTune synchronisation.
scripts/intune_worker.phpandintune_app_worker.phplook like cron jobs but are not. The application starts them itself when you run a sync. Do not schedule them.
See also: Installation Β· Issue trackers (Jira) Β· Workflows Β· Webhooks
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- Theming & Dark Mode
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
- MobileβFriendly
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- Problem Management
- Tasks
- Assets
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
- Forms
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)