10mins"'
, IF(c.lastStatus LIKE 'Error%','title="Status: Error"',''))
, '>')
, '', CONCAT('p:{{pageAlias:T}}&form=cron&r=', c.id) AS _pagee, ' | '
, c.id, ' | '
, IF( c.nextrun=0,"", DATE_FORMAT(c.nextrun, "%d.%m.%y %H:%i:%s")), ' | '
, c.frequency, ' | '
, c.comment, ' | '
, IF(c.lastrun=0,"", DATE_FORMAT(c.lastrun,"%d.%m.%y %H:%i:%s")), ' | '
, IF(c.inProgress=0,"", DATE_FORMAT(c.inProgress,"%d.%m.%y %H:%i:%s")), ' | '
, LEFT(c.laststatus,40) AS '_+pre', ' | '
, c.autoGenerated
, CONCAT('U:form=cron&r=', c.id) AS _paged, ' |
'
FROM Cron AS c
ORDER BY c.id
}
}
Usage
^^^^^
The system `cron` service will call the `QFQ AutoCron` every minute. `QFQ AutoCron` checks if there is a pending job, by looking
for jobs with `nextRun` <= `NOW()`. All found jobs will be fired - depending on their type, such jobs will send mail(s) or
open a `webpage`. A `webpage` will mostly be a local T3 page with at least one QFQ record on it. Such a QFQ record might
do some manipulation on the database or any other task.
A job with `nextRun`=0 or `inProgress`!=0 won't never be started.
Due to checking `inProgress`, jobs will never run in parallel, even if a job needs more than 1 minute (interval system
cron).
Job: repeating
""""""""""""""
* frequency: '1 MINUTE', '2 DAY', '3 MONTH', ....
After finishing a job, `nextRun` will be increased by `frequency`. If `nextRun` still points in the past, it will be
increased by `frequency` again, until it points to the future.
Job: asynchronous
"""""""""""""""""
* frequency: