4. Cron setup
Hourly/Daily Cron and Queue processing¶
YouDate requires three CRON commands: two for common tasks (hourly, daily) and one for queue processing.
Cron setup on Ubuntu/Debian
To setup cron commands on Ubuntu/Debian, read this answer: https://askubuntu.com/a/2369
Cron commands for hourly/daily tasks and queue processing are:
Warning
These paths are examples, you should specify the correct path to the script
30 * * * * /path/to/youdate/application/yii cron/hourly >/dev/null 2>&1
0 18 * * * /path/to/youdate/application/yii cron/daily >/dev/null 2>&1
* * * * * /path/to/youdate/application/yii queue/run --isolate=0 >/dev/null 2>&1
Some hosting providers are not allowing to use cron commands properly. Instead of this, they allow running cron commands using wget
.
For this case, you can use a file named cron.php
(see below). Also you should update your .env
config file: CRON_SECRET
param must be set.
Example: CRON_SECRET
is set to mysecret, so the cron command will look like this:
30 * * * * /path/to/usr/bin/wget -O /dev/null https://youdate.test/cron.php?action=cron/hourly&secret=mysecret
0 18 * * * /path/to/usr/bin/wget -O /dev/null https://youdate.test/cron.php?action=cron/daily&secret=mysecret
* * * * * /path/to/usr/bin/wget -O /dev/null https://youdate.test/cron.php?action=queue/run&secret=mysecret
<?php
require(__DIR__ . '/application/bootstrap.php');
require(__DIR__ . '/application/vendor/autoload.php');
require(__DIR__ . '/application/environment.php');
require(__DIR__ . '/application/vendor/yiisoft/yii2/Yii.php');
$config = require(__DIR__ . '/application/config/console.php');
$application = new yii\console\Application($config);
// protect with password
if (env('CRON_SECRET') !== false) {
$secret = $_GET['secret'] ?? null;
if ($secret !== env('CRON_SECRET')) {
die("Access denied");
}
} else {
die("CRON_SECRET key required (.env file). See https://youdate.hauntd.me/documentation/cron.html for more details");
}
$action = isset($_GET['action']) ? $_GET['action'] : null;
$availableCommands = ['cron/hourly', 'cron/daily', 'queue/run'];
// when pcntl_signal function is not allowed
Yii::$container->set(\yii\queue\db\Command::class, ['isolate' => false]);
if (in_array($action, $availableCommands)) {
$application->runAction($action);
} else {
die("$action not supported");
}
Then you need to execute this script periodically. For example, you can use EasyCron for this.
Detailed documentation located here:
https://www.easycron.com/cron-job-tutorials/how-to-set-up-cron-job-for-youdate-dating-script
Better queue processing (recommended)¶
It's better to process queue with Supervisor or Systemd.
For more details visit official yii2-queue module docs.
Example config for Supervisor (/etc/supervisor/conf.d/youdate.conf
):
[program:youdate-worker]
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php /home/youdate/public_html/application/yii queue/listen --verbose=1 --color=0
autostart=true
autorestart=true
user=youdate
numprocs=2
redirect_stderr=true
stdout_logfile=/home/youdate/public_html/application/runtime/queue-worker.log