-
-
Notifications
You must be signed in to change notification settings - Fork 29
Recurring Tasks
Some work comes back. A monthly backup check, a quarterly access review, a weekly report, the first-Monday-of-the-month patching window. Any task in FreeITSM can be given a repeat, and the next occurrence is created for you rather than left to somebody's memory.
The developer guide is Repeating tasks β Developer Guide.
Related: Tasks Β· Scheduled tasks (cron jobs) Β· Calendar
Requested by dschipfel in discussion #94.
π΄ A fixed schedule needs a scheduled job on the server, and nothing tells you if it is missing. Repeats set to on a fixed schedule are created by
cron/task_recurrence.php. A fresh install has no scheduled tasks at all, so until somebody sets that job up, a fixed-schedule repeat produces nothing β no error, no log entry, just a repeat that quietly never happens. Run it once a day; the commands for Windows and Linux are on Scheduled tasks.Repeats set to after this one is completed are unaffected. They are created inside the web request that completes the previous occurrence, so they work perfectly well on an installation with no scheduled tasks whatsoever.
Open a task, find Repeats in the panel, and click Set up a repeat. You can also right-click a card on the board and choose Set up a repeat without opening it at all.
A subtask cannot repeat on its own. A repeat belongs to the piece of work, not to a step inside it β otherwise you would get orphaned subtasks whose parent was never repeated.
This is the first choice in the editor and the one worth thinking about, because the two behave differently the moment work runs late.
| After this one is completed | On a fixed schedule | |
|---|---|---|
| Next occurrence appears | when you finish the current one | on its date, regardless |
| Its date is counted from | the day you actually finished | the pattern, fixed in advance |
| If you are a week late | everything shifts a week | you now have two to do |
| Two open at once | never | possible |
| Needs the cron job | no | yes |
| Right for | a monthly check, a routine chore | a compliance review, an audit, anything dated |
After completion is what most people mean by "a monthly check". If February's is done on the 5th, March's falls a month after the 5th. Nothing is created while the current one is still open, so you never have two of the same job waiting.
A fixed schedule is what a compliance review needs. The March audit is due in March even if February's was never done. Missed occurrences accumulate rather than being quietly skipped, and if the server was off for a week the job catches up rather than losing them.
π The question that settles it: if running late should push the next one back, choose after completion. If running late should leave you with two to do, choose a fixed schedule.
A pattern is a frequency and an interval β every N days, weeks, months or years β plus, for weekly and monthly repeats, a choice of which days.
| Frequency | What you can say |
|---|---|
| Daily | every day, or every N days |
| Weekly | every week or every N weeks, on any combination of weekdays |
| Monthly β by day number | the 1st, the 15th, the 28th, or the last day of the month |
| Monthly β by named weekday | the first Monday, the third Wednesday, the last Friday |
| Yearly | every year or every N years, optionally in a chosen month, with the same day-number or named-weekday choice |
"Every second week on Monday and Thursday" is a single rule, not two.
Two edges worth knowing, because both are places a naive implementation drops a month:
-
The last day of the month is entered as
-1in the day-number box. It is not the same as 31, and month-end work needs it:-1gives you 28 February, 30 April and 31 January without three separate rules. A day number longer than a short month β the 31st in February β falls back to that month's last day rather than skipping the month. - The fifth Monday of a month that only has four falls back to the last one. The month is never skipped.
| Ending | Behaviour |
|---|---|
| Never | keeps going until you stop it |
| On a date | the last occurrence is the final one falling on or before that date |
| After a number of occurrences | the count includes the task you set the repeat up on |
β οΈ Five means five, including the one in front of you. Asking for five occurrences gives you this task plus four more, not five more. This is deliberate β it is what people mean by "do this five times" β but it is the number most likely to surprise you, so Preview shows the whole list.
Each of these is chosen separately:
- Description
- Subtasks
- Assignee (and team)
- Tags
- Links to tickets, changes and contracts
- Attached documents
They are separate because the right answer differs by job. Carrying the attachments is right for a checklist that uses the same forms every month, and wrong for an audit that is supposed to gather fresh evidence each time.
Two things are not optional:
- A new occurrence always arrives open and unfinished, never in the status the previous one was closed into.
- It keeps the gap between the start date and the due date, so a fortnight of work stays a fortnight.
An occurrence is created when work on it can start, not when it falls due.
- A task whose start date is a fortnight before its due date appears a fortnight ahead.
- A task with only a due date is a point-in-time job and appears on the day.
There is deliberately no "days of notice" setting. The lead time is the duration you have already given the task, which is a better answer than a number that would be wrong for half of them.
π This is why the board only ever holds work you could actually be doing now. Set something to repeat weekly for a year and you do not get 52 cards on day one. Future occurrences of a fixed schedule are still visible on the calendar β drawn faintly, with no task behind them yet β so you can see the plan without the board filling up with jobs nobody can start.
"Every second Tuesday of the month, five times" is not a sentence most people can turn into dates in their head. Preview, beside Save, lists every occurrence the current settings would produce, with start and due dates.
- It works on unsaved settings, so you can try a rule before keeping it.
- The task you are on is shown as the first occurrence, because it counts towards the total.
- Anything that already exists is marked, so previewing an established repeat shows what it has done as well as what it will do.
- A repeat with no ending shows the first 25 and says so.
- If the settings produce nothing at all, it says so plainly β usually a sign that the ending, or the day you chose, is not what you meant.
A repeat set to fire after completion has no dates to list: its next date is counted from the day the work is actually finished, which has not happened. Preview explains that rather than guessing.
A task belonging to a repeat carries a small repeat icon on the board and the calendar. In the panel it shows its position β occurrence 3 of 12 β and a link back to the task the series started from, so the original is one click away from any occurrence.
Stop repeating ends the series and never deletes anything. Occurrences already created are real work, some of it done, so switching a repeat off means "no more of these" rather than "pretend the last six months did not happen".
Changing the settings and saving again replaces the rule for future occurrences and leaves existing ones alone.
In rough order of likelihood:
- It is a fixed schedule and the cron job is not set up. By far the commonest cause, and it is silent. See the banner at the top and Scheduled tasks.
- The next occurrence is not due to start yet. A task with no start date appears on its due date, not before. Use Preview to see when it is expected.
- The series has ended. A count includes the first task, so "5" reaches its end sooner than you might expect. Preview shows whether anything is left.
- The settings produce no further date at all. Preview says so explicitly.
- It is set to repeat after completion and the current one is still open. Nothing will appear until it is finished β that is the mode working correctly.
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- π§ͺ Developer tests
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- π Date & Time Formats
- Theming & Dark Mode
- ποΈ Recent β getting back to what you were doing
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
-
MobileβFriendly
- β³ π« Mobile: Tickets
- β³ π» Mobile: Assets
- β³ π Mobile: Calendar
- β³ π Mobile: Knowledge
- β³ π¦ Mobile: Service Status
- β³ πΌ Mobile: Watchtower
- β³ π§© Mobile: Problem Management
- β³ π Mobile: Change Management
- β³ πΏ Mobile: Software
- β³ β Mobile: Tasks
- β³ π Mobile: Forms
- β³ π Mobile: Contracts
- β³ π Mobile: Domains
- β³ π Mobile: People
- β³ π Mobile: LMS
- β³ πΊοΈ Mobile: CMDB
- β³ πΊοΈ Mobile: Network Mapper
- β³ π§ Mobile: Process Mapper
- β³ βοΈ Mobile: Workflow
- β³ π₯οΈ Mobile: System
- β³ π Mobile: Reporting
- β³ π Mobile: System Wiki
- β³ π Mobile: Self-Service Portal
- β³ π§° Mobile: Techniques & Tricks
-
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
- β³ π‘οΈ CSRF protection (S4) β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- π CardDAV contact sync
- 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: Domains
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ π·οΈ REST API: Cost centres
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ π Rota copy and paste β Developer Deep Dive
- β³ β Checklists & SOPs
- β³ βοΈ Mandatory fields
- β³ π·οΈ Ticket categories
- β³ π₯ Assigning tickets to a team, and escalation
- β³ π’ One board across every company
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
-
β³
βοΈ Telegram channel - β³ β CSAT company scope and filters β Developer Guide
- β³ π₯ Microsoft Teams channel
- β³ π¨οΈ Mattermost channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ β Record previews
- β³ π Ticket notes: internal or shared
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ π¨ Telling the analyst a ticket is theirs
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π’ Ticket numbering
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ π Confidential tickets
- β³ π₯ Portal managers
- β³ π Who has seen a ticket
- β³ π Reading long tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ ποΈ The folder pane
- β³ π½ Just my tickets, or no closed ones
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- β³ π Scheduled work in your own calendar
- Problem Management
- Tasks
-
Assets
- β³ π’ Moving an asset between companies
- β³ π Shared asset locations
- β³ π§βπΌ Assigning assets to analysts
- β³ π Warranty and lease alerts
- β³ π Saved table views
- β³ π¨οΈ Recording anything, and importing it
- β³ π·οΈ QR asset labels
- β³ π Who holds what, and handover documents
- β³ π₯οΈ The inventory agent (PowerShell)
- β³ ποΈ Proxmox VE servers
- β³ βοΈ VMware Cloud Director servers
- β³ π Linking equipment to tickets
- β³ βοΈ Follow-up tasks on a ticket
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
-
Forms
- β³ π¨ The form designer β Developer Guide
- β³ π Layout & the grid β Developer Guide
- β³ ποΈ Collections β grouping submissions
- β³ π Submissions as PDFs
- β³ β‘ What happens next β a form's own actions
- β³ π οΈ Sections & conditional logic β Developer Guide
- β³ π οΈ Lookup fields β Developer Guide
- β³ π‘οΈ Catalogue request approvals
- People
- Domains
- 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
- β³ π’ One board across every company
- β³ 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)
- What this is
-
π Bugs resolved
- β³ π’ Chat tickets ignored your ticket numbering
- β³ π Dates shown as a dash, or in server time
- β³ π Assets β Users showed people from other companies
- β³ π Restricted analysts could read other modules' data
- β³ πΌοΈ Replies with a picture in the thread failed to send
- β³ π Reply attachments never reached the customer
- β³ π οΈ Outbound email attachments β Developer Guide
- β³ π A global SSO provider was missing from the portal
- β³ π Behind a proxy, the SSO redirect said http
- β³ βοΈ The portal tagline moved when you saved it
- β³ π¨ The portal settings screen forgot what you saved
- β³ π‘οΈ The approvals inbox said "Error" and nothing else
- β³ π A table's answers were missing from the PDF
- β³ β A single-select column let you tick every option
- β³ π The portal ignored a form's field widths
- β³ π The tasks board stopped taking clicks
- β³ ποΈ #121 The index list is out of date after upgrading
- β³ π #133 The calendar subscription was empty
- β³ π #131 Tasks always reopened on the board
- β³ π₯ #129 Every page returned HTTP 500 after upgrading
- β³ π³ #127 A PHP warning above the System page
- β³ π #126 Notes stamped with the server's clock
- β³ π Storing every date in UTC
- β³ πͺ The portal was down for everyone signed in
- β³ βοΈ #120 Workflow notes could never be written
- β³ βοΈ #123 Three errors when running Database Verification
- β³ π #122 The description box was a stub in the corner
- β³ π£ Demo data deleted real accounts
- β³ π #117 Sign-in redirected to the wrong address
- β³ π¨ #108 The priority dot was invisible
- β³ β±οΈ #116 Time logged from the right-click menu
- β³ π #114 API keys refused by our own guard
- β³ ποΈ #110 Assigning a task told nobody
- β³ πͺ #107 Signed out while still working
- β³ π #103 "Share with Requester" reached nobody
- β³ π #102 Search found nothing for hyphens
- β³ πͺ #101 Source code editor opened behind
- β³ βοΈ #88 Subtasks could not be ticked off
- β³ π» #84 Asset deep link selected nothing
- β³ π« #79 A new ticket arrived with no status
- β³ π§ #79 A ticket from email did not say so
- β³ π #78 Bell opened to nothing
- β³ π¬ #77 Mail only collected from Inbox
- β³ π #74 The default password could not be changed
- β³ π¦ #70 Renaming an impact level
- β³ π€ #67 App-only mailboxes could not send
- β³ π #45 Verify only ever worked for Microsoft
- β³ π #45 IMAP reported as not authenticated
- β³ βοΈ An email template stopped escaping itself
- β³ π The portal dashboard showed the wrong time
- β³ π’ The folder said 99 and the list showed 96