Cron jobs allow you to run scheduled tasks at specified times or intervals. The
crons section of
.symfony.cloud.yaml describes these tasks and the
schedule when they are triggered. Each item in the list has a unique name
identifying a separate cron job:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
timezone: Europe/Paris crons: update_repo: # every day at 1h15 AM spec: 15 1 * * * cmd: | croncape sh -c "if [ ! -d var/data/code/.git ]; then \ git clone https://github.com/... var/data/code; else \ cd var/data/code && git fetch && \ git reset --hard origin/master; fi" update_doc: # every day at 3h45 AM spec: 45 3 * * * cmd: croncape bin/console app:doc-update
spec property follows the IEEE standard crontab.
By default, the time is interpreted in UTC timezone. Change the timezone used
for cron tasks by setting the global
timezone property. Its value is one
of the tz database region codes.
Command to run¶
cmd property is the command that should be executed. The command is
executed in the
/app directory by the same user as the Web one.
To get feedback when something goes wrong, prefix the command with
croncape will send an email to the address defined by the
MAILTO environment variable. Don't forget to set it first via the following
command for the
$ symfony var:set MAILTO=[email protected]
The minimum interval between cron runs is 5 minutes, even if specified as less. Additionally, a variable delay is added to each cron job in each project in order to prevent host overloading when every project tries to run their nightly tasks at the same time. Your crons will not run exactly at the time that you specify, but will be delayed by 0-300 seconds.
Cron runs are executed using the dash shell, not the bash shell used by normal SSH logins. In most cases that makes no differences but may impact some more involved cron scripts.
If an application defines both a
web instance and a
cron tasks will be run only on the
If you want to run a command in a cron hook for specific environments, check
SYMFONY_BRANCH environment variable:
1 2 3 4 5 6 7 8
crons: snapshot: spec: 0 5 * * * cmd: | # only run for the master branch, aka production if [ "$SYMFONY_BRANCH" = "master" ]; then croncape symfony ... --no-wait fi
Running a Cron Remotely¶
You can force a cron to run remotely by running the
cron command (it takes
the cron name as an argument as specified in
$ symfony cron update_doc
This work, including the code samples, is licensed under a Creative Commons BY-SA 3.0 license.