Kapitel 15 · 15.1
Cron-jobs: lad opgaver køre automatisk
Se det i en kort film
Et cron-job (eller cronjob) er en kommando, som serveren udfører for dig på faste tidspunkter. For eksempel et script hver nat, der rydder op i gamle data, en kobling til dit regnskab hver time, eller de planlagte opgaver i WordPress eller Laravel. Du indstiller det under Cron-jobs, under Avancerede funktioner.

Regler hos WebOké
Du deler en server med andre websites. Derfor gælder der regler for cron-jobs:
- Lad et job køre højst en gang hvert 10. minut. Det beder vi alle om. Serveren tvinger det ikke igennem, men et job, der kører oftere, gør serveren langsommere for dig og andre. Har du flere jobs, så lad dem ikke alle starte på samme tidspunkt.
- Hold et job kort. Skal der ske meget, så fordel arbejdet over flere runder.
Opret et job
- Klik i DirectAdmin under Avancerede funktioner på Cron-jobs.
- Klik på OPRET CRON-JOB.
- Udfyld Minut, Time, Dag i måneden, Måned og Ugedag med hvornår jobbet skal køre (1). En stjerne * betyder "hver".
- Under tidsfelterne ser du ved Cron-job vil køre: (2) i almindeligt sprog hvornår jobbet kører. Kontroller det.
- Skriv under Kommando (3) hvad der skal ske, med fulde stier (se nedenfor).
- Vil du ikke have mail efter hver gang? Klik på UNDGÅ E-MAILS (4).
- Klik på OPRET (5).

Jobbet står derefter på listen. Vil du slette det, sæt da flueben ved det (1) og klik på Slet.

Eksempler på tidspunkter
| Minut | Time | Dag i måneden | Måned | Ugedag | Betydning |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Hver dag kl. 03:30 |
| */10 | * | * | * | * | Hvert 10. minut |
| 0 | * | * | * | * | Hver hele time |
| 15 | 8 | * | * | 1-5 | På hverdage kl. 08:15 (1 er mandag, 0 eller 7 er søndag) |
| 0 | 2 | 1 | * | * | Den første dag i hver måned kl. 02:00 |
Du kan adskille værdier med kommaer (1,15,30), angive et interval med en bindestreg (5-7) og et interval med */ (*/2 er hver anden). Vælg helst et roligt, tilfældigt tidspunkt, som 03:17 i stedet for præcis midnat.
Kommandoen: fulde stier
Et cron-job ved ikke i hvilken mappe det skal starte. Brug derfor altid fulde stier. Din pakke ligger på serveren i /home/ efterfulgt af dit DA-brugernavn (se Find dit servernavn og DA-brugernavn).
Start et PHP-script:
/usr/local/bin/php /home/brugernavn/domains/dindomæne.nl/public_html/opgave.php
Dette bruger samme PHP-version som dit website, altså versionen fra Select PHP version (se Sådan vælger du PHP-version (Select PHP version)).
Kald en webadresse (for eksempel hvis din software har en cron-URL):
curl --silent https://www.dindomæne.nl/cron.php > /dev/null
WordPress: WordPress starter som standard sine planlagte opgaver, når der kommer en besøgende. På et travlt website eller et website med få besøgende er det bedre at gøre det med et cron-job. Sæt derefter i wp-config.php define('DISABLE_WP_CRON', true); og lav et job, der hver 15. minut starter /usr/local/bin/php /home/brugernavn/domains/dindomæne.nl/public_html/wp-cron.php.
Laravel: /usr/local/bin/php /home/brugernavn/domains/dindomæne.nl/artisan schedule:run. Bemærk: schedule:run udfører kun opgaver, der falder præcis på tidspunktet for cron-jobbet. Kører cron-jobbet hvert 10. minut, kører en opgave, der er planlagt til kl. 08:05, aldrig.
Mail efter hver opgave
Giver et job output (tekst eller en fejlmeddelelse), kan serveren sende det via mail. Det sker kun, hvis du har indstillet en adresse. Du har tre muligheder:
- Mail til egen adresse: klik på SEND AL CRON-OUTPUT TIL E-MAIL, indtast en e-mailadresse og klik på GEM. Det gælder for alle dine jobs. Lader du feltet stå tomt, kommer der ingen mail.
- Ingen mail for ét job: klik ved oprettelsen på UNDGÅ E-MAILS. Så kommer der >/dev/null 2>&1 efter din kommando, og output fra det job forsvinder, også selvom du har indstillet en adresse.
- Output i en logfil: sæt efter din kommando >> /home/brugernavn/cron-log.txt 2>&1. Så kan du senere se i Filhåndtering, hvad jobbet gjorde. Ryd en sådan fil op fra tid til anden.

Tip: Indstil en adresse, mens du tester et nyt job. Så ser du med det samme, om det virker. Sluk det derefter, eller send output til en logfil. Mails fra cron-jobs tæller med i afsendelsesgrænsen for din pakke (se Sendegrænser og meddelelsen 'message limit reached').
Ofte stillede spørgsmål
Mit job giver "Could not open input file".
Stien til scriptet er forkert. Kontroller den fulde sti i Filhåndtering: den begynder med /home/brugernavn/domains/.
Mit script virker i browseren, men ikke som cron-job.
Et script, der kører via cron, ved ikke, under hvilket website det kører: $_SERVER['SERVER_NAME'] og $_SERVER['DOCUMENT_ROOT'] er tomme, og relative stier i include virker anderledes. Brug fulde stier i scriptet, eller kald scriptet via curl med webadressen.
Kan jeg se, hvornår et job har kørt?
DirectAdmin holder ikke styr på det for dig. Lad derfor jobbet skrive sit output til en logfil, med datoen i (for eksempel date >> /home/brugernavn/cron-log.txt som første kommando, med ; imellem).
Hvad gør Kør ved @reboot?
Så kører jobbet kun, når serveren genstarter, og ikke på faste tidspunkter. Det har du næsten aldrig brug for på et website.
