Forklaring af crontab-kommandoen
Cron-dæmonen (crond) er en baggrundstjeneste på Unix-lignende operativsystemer, der udfører planlagte kommandoer. Den læser konfiguration fra crontab-filer (cron-tabeller), som definerer, hvornår og hvor ofte hver kommando skal køre.
Syntaks
Crontab-kommandoen administrerer crontab-filer pr. bruger:
crontab [-u user] [-l | -r | -e | -i] [file]Valgmuligheder
- -e
- Redigér den aktuelle brugers crontab i standardeditoren ($VISUAL eller $EDITOR). Den nye crontab installeres, når editoren lukkes.
- -l
- Vis den aktuelle brugers crontab på standardoutput.
- -r
- Fjern den aktuelle brugers crontab fuldstændigt.
- -i
- Bed om bekræftelse før fjernelse (bruges med -r).
- -u user
- Operér på den angivne brugers crontab i stedet for din egen. Kræver root-rettigheder.
- file
- Installér crontab fra den givne fil. Brug - for standardinput.
Crontab-filformat
Hver linje i en crontab-fil er enten en miljøvariabeltildeling, en kommentar (begyndende med #) eller et cron-job med dette format:
┌───────────── minut (0–59)
│ ┌───────────── time (0–23)
│ │ ┌───────────── dag i måneden (1–31)
│ │ │ ┌───────────── måned (1–12 eller JAN–DEC)
│ │ │ │ ┌───────────── ugedag (0–6 eller SUN–SAT)
│ │ │ │ │
* * * * * kommando der skal udføresFeltoperatorer
- * (asterisk)
- Matcher enhver mulig værdi for feltet.
- , (comma)
- Angiver en liste af værdier. Eksempel: 1,15 i dag-i-måneden-feltet betyder den 1. og 15.
- - (hyphen)
- Definerer et inklusivt interval. Eksempel: 9-17 i timefeltet betyder hver time fra 9 til og med 17.
- / (slash)
- Definerer et trin. Eksempel: */10 i minutfeltet betyder hvert 10. minut. Kan kombineres med et interval: 1-30/5.
Specielle strenge
I stedet for de fem tidsfelter kan du bruge en af disse forkortelsesstrenge:
| String | Equivalent |
|---|---|
@yearly / @annually | 0 0 1 1 * |
@monthly | 0 0 1 * * |
@weekly | 0 0 * * 0 |
@daily / @midnight | 0 0 * * * |
@hourly | 0 * * * * |
@reboot | Run once at startup |
Miljøvariabler
Du kan sætte miljøvariabler øverst i en crontab-fil. De mest almindelige:
- SHELL
- Den shell, der bruges til at køre kommandoer (standard: /bin/sh).
- PATH
- Søgestien for kommandoer. Crons standard-PATH er minimal (normalt /usr/bin:/bin), så brug altid absolutte stier eller sæt PATH eksplicit.
- MAILTO
- Hvor kommandooutput sendes hen. Sæt til "" for at undertrykke e-mail. Som standard sendes output til crontab-ejeren.
- CRON_TZ
- Indstiller tidszonen for crontab (ikke understøttet på alle systemer). Uden denne bruger cron systemets tidszone.
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
[email protected]
*/5 * * * * /home/user/scripts/backup.shSystem-crontab vs. bruger-crontab
Bruger-crontabs (redigeret med crontab -e) har fem tidsfelter plus kommandoen. System-crontab (/etc/crontab) og filer i /etc/cron.d/ har et ekstra felt mellem tidsfelterne og kommandoen: brugernavnet, kommandoen kører som.
Eksempel på system-crontab:
# /etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
*/15 * * * * root /usr/local/bin/system-check.sh
0 2 * * * backup /usr/local/bin/nightly-backup.shAlmindelige faldgruber
% (percent sign)
Procenttegnet (%) har speciel betydning i crontab: det omdannes til et linjeskift, og alt efter det første % sendes som standardinput til kommandoen. For at bruge et bogstaveligt % skal du escape det som \%.
# Wrong — the % will be interpreted
0 0 * * * echo "Date: $(date +%Y-%m-%d)"
# Correct — escape the %
0 0 * * * echo "Date: $(date +\%Y-\%m-\%d)"PATH
Cron kører med en minimal PATH. Scripts, der afhænger af kommandoer i /usr/local/bin eller andre mapper, bør enten bruge absolutte stier eller sætte PATH øverst i crontab.
Day-of-month + day-of-week
Når både dag-i-måneden og ugedag er begrænset (ikke *), kører cron kommandoen, når ét af felterne matcher (OR-logik), ikke når begge matcher. For eksempel kører 0 0 1 * 5 ved midnat den 1. i hver måned OG hver fredag.
Timezone
Cron bruger som standard systemets tidszone. Hvis din server er i UTC, men du vil have jobs i en lokal tidszone, skal du bruge CRON_TZ (hvor understøttet) eller konvertere tiderne manuelt.
Output and logging
Som standard mailer cron alt output (stdout og stderr) til crontab-ejeren. For at gøre et job tavst, omdiriger output: command > /dev/null 2>&1. For at logge output, omdiriger til en fil: command >> /var/log/myjob.log 2>&1.
# Discard all output
*/5 * * * * /path/to/script.sh > /dev/null 2>&1
# Log output to a file
*/5 * * * * /path/to/script.sh >> /var/log/myscript.log 2>&1Praktiske eksempler
*/5 * * * *— run every 5 minutes0 0 * * *— run once a day at midnight0 9 * * 1-5— run at 9 AM on weekdays0 0 1 * *— run at midnight on the 1st of every month0 0 * * 0— run at midnight every Sunday