Background Jobs

ownCloud supports background job functionality (otherwise known as Cron jobs). To create them requires two steps to be completed:

  • Create a job class

  • Register the class with ownCloud

Create a Job Class

The first step is to create a job class, which will provide the job functionality. For this example, we will call it: lib/Cron/SomeTask.php. The class only needs to define one, static, method called run. In this example, we’re retrieving a service from the container, and in turn calling its run method.

<?php

namespace OCA\MyApp\Cron;

use \OCA\MyApp\AppInfo\Application;

class SomeTask extends OC\BackgroundJob\TimedJob {
    
    protected function run($argument) {
        (new Application())
            ->getContainer()
            ->query('SomeService')
            ->run();
    }
}

Try to keep the method as small as possible, because its hard to test static methods.

Register the Class with ownCloud

Next, you need to register the job as a background job. This is done in appinfo/info.xml by adding a job element, containing the name of the job class, to the background-jobs element. The example below shows how to add the SomeTask class, which we just created, as a background job.:

<background-jobs>
    <job>\OCA\MyApp\Cron\SomeTask</job>
</background-jobs>

Testing

To test the job classes, you can run Cron manually, as in the example below:

sudo -u www-data ./occ system cron

After doing so, you will need to reset the job to allow it to be run, manually, again. To do this, go to the database and run the following SQL query:

UPDATE oc_jobs SET last_run=0,last_checked=0,reserved_at=0;

Is The Cron Service Running?

Finally, don’t forget to add the ownCloud Cron process in the web server’s crontab. To do this, first open the web server’s crontab for editing by running:

In this example, www-data is the web server user:

sudo crontab -u www-data -e

Then, add the ownCloud Cron process to the crontab, for example:

*/15  *  *  *  * /usr/bin/php /path/to/your/owncloud/occ system:cron