-
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 |
cron/attachment_extract.php |
Reads the text out of PDFs and scanned documents so they can be searched | Nothing immediately β see the note below | every 5 minutes |
The first four each have a 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.
The attachment job is the odd one out, deliberately. It is the only one whose absence is not silent failure. Without it, waiting documents are still read β a few at a time, whenever somebody is using FreeITSM β so attachment searching works on an installation with no scheduled tasks at all. The job just keeps up with a busy service desk rather than trickling. Both behaviours can be turned off in Tickets β Settings β Indexing, and neither does anything until a document reader is set up under System β Integrations β Apache Tika. See Attachment text extraction.
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 them all up β 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
schtasks /create /tn "FreeITSM Attachment Text" /tr "C:\wamp64\bin\php\php8.4.0\php.exe C:\wamp64\www\freeitsm-app\cron\attachment_extract.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
*/5 * * * * /usr/bin/php /var/www/freeitsm-app/cron/attachment_extract.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)