Code Monkey home page Code Monkey logo

ddev-cron's Introduction

tests project is maintained

DDEV-CRON

Introduction

This DDEV add-on helps to execute a command in the web container based on a cron schedule. Cron is a classic Linux/Unix service with a well-known configuration syntax.

The add-on:

  • Installs and runs the cron service inside the web container
  • Adds an example job that writes out the current time.

This extension is designed to be a generic implementation. See Running TYPO3 Cron inside the web container for a specific example of a manual setup.

Getting started

  • Install the DDEV cron add-on:

    ddev get ddev/ddev-cron
  • Add at least one ./ddev/web-build/*.cron file. This will be automatically added to crontab on startup. See Implementation

  • Restart DDEV to apply changes:

    ddev restart

Implementation

This extension does the following:

  • Adds required cron service to the web container.
  • Configures the cron service using ./ddev/web-build/cron.conf.
  • Adds all ./ddev/web-build/*.cron files to crontab scheduler.

*.cron

This addon uses *.cron files to populate crontab. This allows projects to track and manage cron jobs via git.

On ddev start, all ./ddev/web-build/*.cron files are:

  • Copied into the /etc/cron.d.
  • Have their permissions updated.
  • Added to crontab.

See .ddev/web-build/time.cron.example and Examples section below for specific example.

Useful sites and debugging

  • crontab guru is a helpful for generating cron schedule expressions.
  • For crontab usage, see crontab man page.
  • Check crontab by running ddev exec crontab -l.
  • If you want the cron to run on your local time instead of UTC, make sure to set timezone in your .ddev/config.yaml.
  • To help debug, connect to the web container session (ddev ssh) and manually run the commands to confirm expected results.
  • If you are running a CMS command that requires access to the database, set the environment variable IS_DDEV_PROJECT=true

Examples

The following examples are provide as guides. PRs are welcome for changes and updates for current best practices for specific frameworks.

Logging current time

This addon provides an example that can check if the cron service is running. Every minute, it writes the current time (UTC timezone) to ./time.log.

  • Rename ./ddev/web-build/time.cron.example to ./ddev/web-build/time.cron
  • Restart the DDEV project to start the time example.
  • After at least a minute, you should see ./time.log containing the web container's current time.

Drupal cron

  • Create a ./.ddev/web-build/drupal.cron file
  • Add the following code to run the drupal scheduler every 10 minutes and write to a log file.
    • DDEV_PHP_VERSION value must match your project's PHP version.
*/10 * * * * IS_DDEV_PROJECT=true DDEV_PHP_VERSION=8.1 /var/www/html/vendor/bin/drush cron | tee -a /var/www/html/cron-log.txt

Laravel cron

  • Create a ./.ddev/web-build/laravel.cron file
  • Add the following code to run the laravel scheduler every minute.
* * * * * cd /var/www/html && IS_DDEV_PROJECT=true php artisan schedule:run >> /dev/null 2>&1

OpenMage cron

  • Create a ./.ddev/web-build/openmage.cron file
  • Add the following code to run the OpenMage scheduler every minute.
* * * * * /var/www/html/cron.sh

TYPO3 scheduler

  • Create a ./.ddev/web-build/typo3.cron file
  • Add the following code to run the typo3 scheduler every minute and write to a log file.
* * * * * cd /var/www/html && IS_DDEV_PROJECT=true vendor/bin/typo3 scheduler:run -vv | tee -a /var/www/html/scheduler-log.txt

WordPress cron

  • Create a ./.ddev/web-build/wordpress.cron file
  • Add the following code to trigger the WordPress scheduler.
*/15 * * * * IS_DDEV_PROJECT=true DDEV_PHP_VERSION=8.1 cd /var/www/html && /usr/local/bin/wp cron event run --due-now 2>&1 | tee -a /var/www/html/cron.log
  • This configuration will run the WordPress scheduler every 15 minutes and will create a cron.log file in the root of your project

Contributed and maintained by @tyler36 based on the original Running TYPO3 Cron inside the web container by @thomaskieslich

Originally Contributed by @thomaskieslich in https://github.com/ddev/ddev-contrib/tree/master/recipes/cronjob)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.