The incredible possibilities offered by the Scheduled Tasks in Joomla
Present slides: https://slides.woluweb.be
This presentation was / will be made at
- JoomlaCamp Essen Germany - 2024.03.01 + 2024.03.02 - #jc24de #jcamp
- JoomlaDay USA - 2024.04.12 - #jdayusa - login to see the video as soon as it is made available
- JoomlaDagen Netherlands - 2024.05.31 - #jd24nl
- JoomlaDay D.A.CH - 2024.09.20 - #jd24dach
- JoomlaDay France - 2024.10.18 - #jd24fr
1 INTRODUCTION
Since version 4.1 (and so also in 5.x series) Joomla introduced a very interesting new feature called Scheduled Tasks. WIth other words with automation
Even though it has been present since 14 Fabruary 2022, everytime I exchange with other Joomlers I realize that the majority has overlooked the power of this feature.
So the goal of this article is to shed some light on the possibilities at the hand of different examples / usecases:
- some are native Plugins, ready to be used within Joomla
- some are third-party Plugins, typically open source and available for free on Github
- and of course the whole idea is that you can also create your own, in order to meet your specific needs
2 Other sources about the Task Scheduler
Quite luckily different people have already produced interesting content about the Task Scheduler.
So let me start by thanking and referencing them:
- Brendan Hedges wrote in March 2023 an introduction in the current Joomla Community Magazine:
- Get to know the new Joomla! Task Scheduler
- He was concluding his article by 20 giving plugin ideas
- Nicholas Dionysopoulos made several presentations at Joomla events
- JoomlaDay D.A.CH 2023
- see the video on https://www.youtube.com/watch?v=Owih9M7I2_w
- download the slides on https://akee.ba/jtasks2023
- Joomla NXT
- see the video on https://www.youtube.com/watch?v=k28_tQzCLlU
- see the slides on https://akee.ba/shceduledtaskspresentation (yes, with a typo)
- JoomlaDay D.A.CH 2023
- JoomShaper wrote a tutorial about using the (native) Image Size Check Scheduled Task: https://www.joomshaper.com/blog/joomla-4-task-scheduler
- TechFry wrote a small tutorial about how to create your own Task Scheduler Plugin: https://www.techfry.com/joomla/how-to-create-joomla-task-scheduler-plugin
3 Scheduled Tasks - native Plugins
Go to your backend > System > Scheduled Tasks.
Click on the New button and see what is already natively available in J5:
- Delete ActionLogs - Task
Delete Action logs after days - Expiration of privacy consents
Manage the expiration of privacy consents - Rotate Logs
Periodically rotates log files. - Task - Session Data Purge
Task Plugin that purges expired data and metadata depending on the session handler set in Global Configuration. - Joomla! Update Notification
This task periodically checks for the availability of new Joomla! versions. When one is found it will send you an email, reminding you to update. You can customise the email - Image Size Check
Check images, resize if larger than allowed. Attention: The original file will be overwritten! - GET Request
Make GET requests to a server. Supports a custom timeout and authorization headers. - Toggle Offline
Toggles the site’s status on each run. - Set Site Online
Sets site status to online on each run. - Set Site Offline
Sets site status to offline on each run. - Global Check-in
Check in checked out items.
3.1 My favourite ones
My favourite ones are
3.1.1 Global Check-in
Gosh, how many times end-users called me in the last ten years because they were editing from the front-end but some Articles were “checked out” by “accident”, preventing them from opening them. Every time I would have to go to the back-end to “check-in” all Items.
Now I can automate this action every night at 3PM for example
3.1.2 Image Size Check
In many cases you want to have a maximum width or height for images in a given Folder. But even if you make your end-users aware of the importance or resizing (in order to have a better performance for the visitors but also to have smaller backups etc) still people “forget” to resize their images.
Now I can for given Folders automatically resize the images (for example I set a maximum width of 600 pixels for all images in the Newsletter folder)
3.1.3 Get request
For some of my websites, I need to trigger some synchronization thanks to a script which is accessible on a given URL. The Get request does exactly that…
4 Scheduled Tasks - third-party Plugins
4.1 Check-in all your Content in J4
As mentioned above, in Joomla 5 there is a Native Plugin to check-in all your Content. But what is your website is still running J4?
Free - by Tobias Zulauf
4.2 Auto-delete files
What about auto-deleting files older than a certain timeframe in a given folder only (and not its subfolders)
Free - by Tom van der Laan
See https://github.com/TLWebdesignNL/Auto-Delete-Files-Task-Scheduler-Plugin
4.3 Change different Parameters of Articles automatically
What about being able to move Articles to other Categories in function of a certain date (or do similar things)
4.3.1 Kick Manage Article
A Task Scheduler to move articles from some Category to another Category when older than X days, based on the following dates:
- created
- modified
- published
- unpublished
Free - by KickTemp
4.3.2 CCC Timewarp
With this plugin, you can
- move your Articles to a different Category depending on a certain Date
- change the publication Status
- adjust the Access Level
- …
This is particularly useful if you use Joomla Articles to display Events, but also, for example, to make your news only available to a closed circle for x days and only make them public after some time.
NB: on top of the usual Types of Dates, you can also use a Custom Field of Type Date in your conditions, which is handy.
Paid - by Elisa Foltyn
See
- https://coolcat-campus.com/en/extensions/joomla-task-scheduler-plugin-ccc-timewarp
- https://coolcat-campus.com/en/subscribe/joomla-plugins
- the presentation made by Elisa on 2024.07.31 on Tim Davis’ YouTube Channel (Basic Joomla Tutorials): https://www.youtube.com/watch?v=M24KOS71Zis (in particular from minute 15)
4.4 Reset Hits
For a given project where I needed to display “the most popular Films of the month”, I wanted to reset the number of Hits on the 1st day of every month.
In the Configuration you can choose to reset Hits for any of the following:
- Articles
- Tags
- Categories
Free - by Marc Studer and Marc Dechèvre
4.5 Synchronize my Custom Fields with some external Web Service
Yet for another project I needed to synchronize the value of 20 Custom Fields for 300 Articles with the latest data coming from some external Web Service.
Let’s take a practical example: social.brussels is a kind of Directory of all Social Services and Associations in Brussels. You can access the details of each organization:
- either direclty from their website (for humans): https://social.brussels/organisation/13219
- either in json-format (for programs): https://social.brussels/rest/organisation/13219
On the Joomla website there are hundreds of articles having Custom Fields for the Address, Phone number etc.
So the idea was to automate a daily synchronization between the external source and our website so that the end users would not spend hours every month checking whether some information were outdated since last time…
Free - by Dimitris Grammatikogiannis
4.6 Delete Trashed
With this Task Plugin you can schedule the execution of the Empty Trash task.
Free - by Nicola Galgano
See https://extensions.joomla.org/extension/task-delete-trashed
4.7 TF Auto Update
Two Tasks are available:
- Update any column in any Joomla! database automatically
- Delete records from any Joomla database table based on defined rules
Free - by Tech Fry
4.8 Force password reset
This Joomla! task plugin will help You to force users of selected groups to reset their password periodically.
You can set different periods for different users groups.
When task run , user will forced to reset his password after their next login
Paid - by Mishel Naguib
See https://extensions.joomla.org/extension/force-password-reset-task
4.9 Manage Inactive Users
This task plugin will help You to manage inactive users.
Paid - by Mishel Naguib
See https://extensions.joomla.org/extension/manage-inactive-users-task
4.10 Feeding Articles from an external API
It reads an external API (a kind of Job Board) and feeds Joomla Articles of a given Category.
Official description: API interface for Apicodo Dorfapp. Task plugin to import the data time-controlled via the APICODO API. A category must be selected in the plugin to which the data records can be transferred. With each new request, all data records in the category are deleted and rewritten.
Free - by Claudia
4.11 Executing a query
(Coming soon)
Free - by Oliver Schuldt
4.12 Migrate user profiles to custom fields
This “Scheduled Tasks” plugin migrates the data from the Joomla user profile to Custom Fields. Manually, hourly, according to your specifications.
Free - by Kicktemp
4.13 Extension Updates Notification
This Joomla plugin checks for updates of extensions and sends an eMail once available, the code is based on the core plg_task_updatenotification plugin.
https://github.com/zero-24/plg_task_extensionupdates
Free - by Tobias Zulauf
4.14 JFilters - set automatically the min and max values when using the Range Slider
JFilters is an extension by BlueCoder (Sakis Terzis) allowing to filter your Articles and Contacts using Custom Fields, Categories, Tags and native fields:
https://blue-coder.com/jfilters
In June 2024, JFilters introduced the possibility to filter on a range (for Integers or Dates) which is quite handy. See the details on
https://blue-coder.com/help/blog/how-to-fiilter-using-numerical-and-date-ranges
For this Range (with or without a Slider), in practice you need to manually set a minimum and a maximum value.
At #jd24dach, Elisa Foltyn created a Task plugin which will automatically set these minimum and a maximum values based on the real values met in the corresponding Custom Field.
I have a usecase where this is particularly useful: for a website showing the details of 3000+ movies, I wanted to be able to filter on the Duration of each film. Of course I could have set a theoretical minimum value of 0 and a maximum value of 300 minutes… but thanks to this Task the min and max values are dynamically set based on the real Duration of each of the films.
Free - by Elisa Foltyn (aka Coolcat Creations)
https://github.com/coolcat-creations/plg_task_jfilterrangesliderupdater
4.15 Scheduled Tasks provided directly by some Extensions
As mentioned in the Sources, some extensions provide their own Task Schedulers. Examples:
- Akeeba Backup - Backup Task: https://akee.ba/scheduledtasks
- Admin Tools
- PHP File Scanner: https://www.akeeba.com/documentation/admin-tools-joomla/php-file-scanner-joomlascheduled.html
- Remove unnecessary users with Pro version
- RO CSVI - https://rolandd.com/news/ro-csvi-8-9-0-release
- PWT ACL - on 17 May 2024 PWT ACL 5.1.0 introduces two powerful Scheduled Tasks for Joomla 4 and 5: https://extensions.perfectwebteam.com/news/pwt-acl-510-released
- Fix Assets
- Rebuild Assets
- Hikashop - on 20 June 2024 Hikashop released 2 new free plugins for the Joomla Task Scheduler
- one to schedule report exports https://hikashop.com/marketplace/product/283-task-report.html
- and one to schedule mass actions https://hikashop.com/marketplace/product/284-task-massaction.html
6 See common parameters
You can get an email notification
- upon success
- upon failure
You can enable/disable logs.
Etc.
7 Triggering the tasks
Last but not least:
- if you only want to run a given Task manually, there is a nice yellow button
Run Test
to launch it - but more generally, Scheduled Tasks need at least 1 triggering method to be active if you wanta automation. There are 3 different triggering methods
See a summary hereafter but you can find more documentation about that here:
- https://akee.ba/scheduledtasks
- https://docs.joomla.org/Help4.x:Scheduled_Tasks:_Options (still empty atm)
7.1 CRON jobs
- you only need to setup 1 CRON job… and it will process the whole tasks queue (fastest and most efficient)
- command:
/path/to/php /path/to/site/cli/joomla.php scheduler:run --all
- set the frequence according to your needs (5 minutes for example. Or even every minute if your host allows it)
7.2 Web CRON (a URL)
Note: at the moment the Web CRON only works if you set the ID of a given task. Web CRON will be fully functional with Joomla 5.3. You can follow the topic on https://github.com/joomla/joomla-cms/pull/43817
- with your host: still requires to setup a CRON job (wget or curl. Or sometimes via a specific interface of your host)
- with a third-party service: but can become very expensive
- to enable, go to System > Manage > Scheduled Tasks > Options. There go to Web Cron tab, Enable it, Save and then a Webcron Link appears, that you can Copy
7.3 Lazy Scheduler (also sometimes called “poor man’s cron”)
- to enable, go to System > Manage > Scheduled Tasks > Options. There go to Lazy Scheduler tab, Enable it, change maybe the Request Interval (from 300 to 30 for example if you have time-sensitive Tasks) and Save
- so very easy
- but be aware:
- by definition it only triggers when you have visitors. So you can’t predict the execution time (more likely to run when the website is busy) and it requires more resources
- if you use CDNs it could be that your website is not triggered because of the third party caching solution
- better not to use for tasks which are heavy (backups for instance) or which are time-sensitive (newsletter, …)
8 Errors (Exit Codes)
If you get Error notifications mentioning Exit Codes, it is not very explicit.
The following file might already help you understanding what your Exit Code means :
Given the fact that a Task which does end properly might block the execution of the next tasks, you definitely want to check what happens if you get an Error.
PS: one example of Exit Code in real life: the Notification was enabled… but no Email or a wrong Email was set for the corresponding User
9 Conclusion
Have fun and enjoy the power of Joomla! ❤️💙🧡💚
10 Get in touch
Any suggestion about this presentation?
Please feel free to contact me. I’ll be happy to keep improving it 🙂
Marc Dechèvre | woluweb
+32 474 37 13 12 | +32 2 772 58 69