Forklaring av crontab-kommandoen
Cron-daemonen (crond) er en bakgrunnstjeneste på Unix-lignende operativsystemer som kjører planlagte kommandoer. Den leser konfigurasjon fra crontab-filer (cron-tabeller) som definerer når og hvor ofte hver kommando skal kjøres.
Syntaks
Crontab-kommandoen administrerer crontab-filer per bruker:
crontab [-u user] [-l | -r | -e | -i] [file]Alternativer
- -e
- Rediger gjeldende brukers crontab i standardredigereren ($VISUAL eller $EDITOR). Den nye crontaben installeres etter at redigereren lukkes.
- -l
- Vis gjeldende brukers crontab til standardutdata.
- -r
- Fjern gjeldende brukers crontab fullstendig.
- -i
- Be om bekreftelse før fjerning (brukes med -r).
- -u user
- Operér på den angitte brukerens crontab i stedet for din egen. Krever root-rettigheter.
- file
- Installer crontaben fra den angitte filen. Bruk - for standardinndata.
Crontab-filformat
Hver linje i en crontab-fil er enten en miljøvariabeltilordning, en kommentar (starter med #), eller en cron-jobb med dette formatet:
┌───────────── minutt (0–59)
│ ┌───────────── time (0–23)
│ │ ┌───────────── dag i måneden (1–31)
│ │ │ ┌───────────── måned (1–12 eller JAN–DEC)
│ │ │ │ ┌───────────── ukedag (0–6 eller SUN–SAT)
│ │ │ │ │
* * * * * kommando som skal kjøresFeltoperatorer
- * (asterisk)
- Matcher alle mulige verdier for feltet.
- , (comma)
- Angir en liste med verdier. Eksempel: 1,15 i dag-i-måneden-feltet betyr den 1. og 15.
- - (hyphen)
- Definerer et inkluderende område. Eksempel: 9-17 i timefeltet betyr hver time fra 9 til 17.
- / (slash)
- Definerer et steg. Eksempel: */10 i minuttfeltet betyr hvert 10. minutt. Kan kombineres med et område: 1-30/5.
Spesielle strenger
I stedet for de fem tidsfeltene kan du bruke en av disse forkortelsene:
| 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 sette miljøvariabler øverst i en crontab-fil. De vanligste er:
- SHELL
- Skallet som brukes til å kjøre kommandoer (standard: /bin/sh).
- PATH
- Søkestien for kommandoer. Crons standard-PATH er minimal (vanligvis /usr/bin:/bin), så bruk alltid absolutte stier eller sett PATH eksplisitt.
- MAILTO
- Hvor kommandoutdata sendes. Sett til "" for å undertrykke e-post. Som standard sendes utdata til crontab-eieren.
- CRON_TZ
- Angi tidssonen for crontaben (støttes ikke på alle systemer). Uten den bruker cron systemets tidssone.
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
[email protected]
*/5 * * * * /home/user/scripts/backup.shSystem-crontab vs. bruker-crontab
Bruker-crontaber (redigert med crontab -e) har fem tidsfelt pluss kommandoen. System-crontaben (/etc/crontab) og filer i /etc/cron.d/ har et ekstra felt mellom tidsfeltene og kommandoen: brukernavnet kommandoen kjøres som.
System-crontab eksempel:
# /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.shVanlige fallgruver
% (percent sign)
Prosenttegnet (%) har spesiell betydning i crontab: det oversettes til en ny linje, og alt etter det første % sendes som standardinndata til kommandoen. For å bruke et bokstavelig %, 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 kjører med en minimal PATH. Skript som er avhengige av kommandoer i /usr/local/bin eller andre kataloger bør enten bruke absolutte stier eller sette PATH øverst i crontaben.
Day-of-month + day-of-week
Når både dag-i-måneden og ukedag er begrenset (ikke *), kjører cron kommandoen når ett av feltene matcher (OR-logikk), ikke når begge matcher. For eksempel kjører 0 0 1 * 5 ved midnatt den 1. i hver måned OG hver fredag.
Timezone
Cron bruker systemets tidssone som standard. Hvis serveren din er i UTC, men du vil ha jobber i en lokal tidssone, bruk CRON_TZ (der det støttes) eller konverter tidene manuelt.
Output and logging
Som standard sender cron all utdata (stdout og stderr) til crontab-eieren. For å gjøre en jobb stille, omdiriger utdata: command > /dev/null 2>&1. For å logge utdata, 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