The 5.7 branch of Magnolia reached End-of-Life on December 31, 2023, as specified in our End-of-life policy. This means the 5.7 branch is no longer maintained or supported. Please upgrade to the latest Magnolia release. By upgrading, you will get the latest release of Magnolia featuring significant improvements to the author and developer experience. For a successful upgrade, please consult our Magnolia 6.2 documentation. If you need help, please contact info@magnolia-cms.com.

The Magnolia Scheduler module allows you to schedule commands to run at regularly scheduled times and is powered by the Quartz Engine.

Installing

Maven is the easiest way to install the module. Add the following to your bundle. The parent POM of your webapp project should set the latest version of the module automatically. Should you need to use a specific module version, you can define it using the <version/> in the dependency.

<dependency>
  <groupId>info.magnolia</groupId>
  <artifactId>magnolia-module-scheduler</artifactId>
</dependency>

Usage

The Scheduler module can be used to execute any configured command at regular intervals. For example, it can:

  • Activate or deactivate a promotional web page on a specific date.
  • Import content from an external source into a Magnolia workspace.
  • Send emails on specific days.
  • Delete specified forum messages or threads.
  • Synchronize target and source instances.
  • Execute a custom command.

Configuration

The Scheduler module is used to execute commands that are typically configured in other modules. See  Commands for more.

Scheduled tasks are configured in modules/scheduler/config/jobs

Exampledemo job that activates the /news page hourly.

Node nameValue

 
modules


 
scheduler


 
config


 
jobs


 
demo


 
params


 
path

/news

 
repository

website

 
catalog

website

 
command

activate

 
cron

0 0 * * * *

 
description

activate each hour the page news.html

 
enabled

false

 
cleanTempFiles


 
checkLicense


 
generatePlanetData


 
collectPlanetStatistics


 
removeCategories


 
generateCategories


Properties:

jobs

required

Jobs node.

<job name>

required

Name of the job.

params

optional

Parameters node.

<parameters>

required/optional

Parameters passed to the command. Depends on the command. For example, the activate command expects to receive a repository name and a content path, and the generatePlanetData command used by the RSS Aggregator module, expects only a repository parameter. 

catalog

required

Name of the catalog where the command resides

command

required

Name of the command

cron

required

CRON expression that sets the scheduled execution time. For example 0 0 1 5 11 ? 2010 means "run on November 5th, 2010 at 01:00 am" (as opposed to 0 0 1 5 11 ? * which will run annually on "Nov 5th at 01:00 am") . Cronmaker is a useful tool for building expressions

description

optional

Description of the job

enabled

optional, default is false

Enables and disables the job.

concurrent

optional, default is true

Defines whether the same job can be running concurrently.

The Synchronization, Backup and RSS Aggregator modules use the Scheduler module for scheduling their execution.

Scheduling tasks on cluster nodes

In a clustered configuration one or more workspaces is stored in a shared, clustered storage. See C lustering  for more. Cluster nodes (Magnolia instances) access the clustered workspace rather than their own workspaces. This can lead to a situation where multiple scheduled jobs attempt to access the same content simultaneously and a lockup occurs. To avoid this situation, identify the cluster nodes and run the job on only one node.

  1. Set the magnolia.clusterid property in the magnolia.properties file of the cluster node. The file is in the /<CATALINA_HOME>/webapps/<contextPath>/WEB-INF/config/default folder. The property value can be a literal cluster name such as public123 (magnolia.clusterid=public123) or a variable such as ${servername}.
  2. To configure the job to run on the identified cluster node, go to /modules/scheduler/jobs and edit the job configuration.
  3. Under the params node, add a clusterId property and set the value to match the magnolia.clusterId of the cluster node where you want to run the job.

    Node nameValue

     
    scheduler


     
    config


     
    jobs


     
    demo


     
    params


     
    clusterID

    cluster1

     
    path

    /news

     
    repository

    website

     
    enabled

    false

     
    ....

    ....

Job configurations are stored in the config workspace. If you want to run a particular job on all cluster nodes you would have to cluster the config workspace so that all instances can read the configuration or create the same job configuration on all cluster nodes. This can be time consuming. As a workaround, configure the job once on a clustered instance without the clusterId property. This has the effect that the job will run on all cluster nodes.

1 Comment

  1. Hello, how can I configure that our magnolia user can abort the scheduled publishing? At the moment only a superuser can do this no matter which user rights he has.