Den vanligste måten å kjøre oppgave eller prosesser i bakgrunnen på er å benytte en crontab. En crontab er en liste over kommandoer, prosesser som skal kjøre til faste tidspunkter, eller med faste intervaller, og kan benyttes til å automatisere maskinrelaterte oppgaver.
For å redigere innholdet i crontab på din konto må du logge på kontoen med SSH.
Liste innholdet i crontab:
crontab -l
Redigere innholdet i crontab:
crontab -e
Første gang når du redigerer crontab på kontoen din må du velge hvilket redigeringsverktøy du skal benytte. Dersom du ikke er en erfaren Linux-bruker anbefaler vi at du velger nano i listen over tilgjengelige redigeringsverktøy.
Fjerne crontab:
crontab -r
Crontab syntax
Du må oppgi når en kommando skal kjøres, og hvilken kommando som skal kjøres:
* * * * * * kommando
| | | | | |
| | | | | +-- Year (1900-3000)
| | | | +---- Day of the Week (1-7, 1 standing for Monday)
| | | +------ Month of the Year (1-12)
| | +-------- Day of the Month (1-31)
| +---------- Hour (0-23)
+------------ Minute (0-59)
Oppgi stjerne for "alle".
Eksempler:
* * * * * * Each minute 45 17 7 6 * * Every year, on June 7th at 17:45
Det finnes også mer grafiske verktøy som forenkler tidsangivelsen, se https://crontab-generator.org/
Oppgi kommandoer i crontab
Det er svært viktig at du tester kommandoen som du ønsker å legge inn i crontab i kommandolinjen på forhånd. Sjekk at kommandoen returnerer resultatet du ønsker, og tenk på at du skal kjøre jobben til et fast intervall. NB! Dersom du skal kjøre et PHP-script i en crontab må du oppgi huske på å oppgi php-kommandoen foran path til scriptet du ønsker å kjøre.
30 * * * * /usr/bin/php $HOME/www/path/to/php/file/you/want/to/run.php
Logging og error-logging
Det er en fordel å gjøre redirect av stdout og stderr for det som kjøres fra cron. Det gjør du ved å legge til følgende:
> $HOME/cron.log 2>&1
Eksempelet over blir da slik:
30 * * * * /usr/bin/php $HOME/www/path/to/php/file/you/want/to/run.php > $HOME/cron.log 2>&1
Kommandoen over vil overskrive loggfilen hver gang jobben kjøres. Om du ønsker at hver ny invokasjon av scriptet legger til nye data i loggfilen gjøres dette slik:
30 * * * * /usr/bin/php $HOME/www/path/to/php/file/you/want/to/run.php >> $HOME/cron.log 2>&1
Ønsker du i tillegg en timestamp som viser at jobben faktisk har kjørt, må du enten skrive scriptet som kjører slik at det skriver ut tid og dato når det kjører, eller du kan bruke følgende format:
30 * * * * date ; /usr/bin/php $HOME/www/path/to/php/file/you/want/to/run.php >> $HOME/cron.log 2>&1