Hvordan bruke cron for å kjøre script automatisk?

Anonym
Anonyms bilde

Jeg har webhotell med SSH tilgang og vil automatisere kjøring av noen script ved hjelp av cron. Scriptet jeg vil kjøre er PHP og ligger under public_html, så det er tilgjengelig via nett. Problemet er at jeg må gå inn på scriptet for å kjøre det.

Spørsmålet mitt er: Hvordan bruke cron for å kjøre script automatisk?

Hjemmeside
Hjemmesides bilde
Avlogget
Bidragsyter
Ble med: 17.06.2008
Guide: Kjør script automatisk med cron

For de som ikke vet det: Cron er et lite program (på unix/linux) som tillater automatisk kjøring av script og kommandoer. Man kan feks kjøre programmer og kommandoer på tidspunkter man selv spesifiserer. Dette er kjekt for å automatisere forskjellige ting, feks sletting av brukere som er inaktive osv.

For å sette opp kommandoer i cron må du enten ha SSH access til webhotellet, eller så må kontrollpanelet støtte oppretting av cronjobber. Hvis du er usikker på dette, hør med webhosten din.

Cron guide for automatisk kjøring av script & kommandoer

I dette eksemplet skal vi kjøre et PHP-script som ligger tilgjengelig på nettet. Vi skal derfor bruke wget som er en kommando for å hente ressurser over feks HTTP (Hyper Text Transfer Protocol).

Føst må du sjekke om du har cron, logg inn på webhotellet ditt via SSH og kjør kommandoene

:~$ which cron
:~$ which crontab

Hvis én av dem gir deg et svar som feks

:~$ which cron
/usr/bin/cron
:~$ which crontab
/usr/bin/crontab

så betyr det at du har mulighet for å sette opp automatiske cronjobs. Vi antar at du har crontab, men kommandoene er like for cron

Selv liker jeg å opprette et eget dokument som inneholder oppgavene som skal kjøres av crontab, og man kan skrive

:~$ crontab -l

for å se hvilke jobber som er lagt inn for kjøring. I latskapens navn lager vi ikke en egen fil med oppgavene, men skriver enkelt og greit

:~$ crontab -e

for å editere hvilke oppgaver som skal utføres. Vi kommer da inn i editormodus, og kan begynne å angi tidspunkter for og hvilke kommandoene vi vil kjøre.

Eksempel på en kommando i cron

* * * * * /usr/bin/wget -O - -q -t 1 http://domene.com/script.php

For å dekode denne kommandoen, se følgende

+---------------- minutt (0 - 59)
| +-------------- time (0 - 23)
| | +------------ dato i måned (1 - 31)
| | | +---------- måned (1 - 12)
| | | | +-------- dag i uken (0 - 7) (søndag = 0 eller 7)
| | | | |
| | | | | kommando som skal kjøres
* * * * * /usr/bin/wget -O - -q -t 1 http://domene.com/script.php

Stjerne (*) er et wild card hvilket betyr alt. Med andre ord vil denne kommandoen kjøres hvert minutt, hver time, hver eneste dato i måneden, hver eneste måned og hver eneste dag i uken. Komplisert? Egentlig ikke.

Skal man kjøre en kommando, feks én gang i døgnet, klokken 23:00, så ville kommandoen sett slik ut:

0 23 * * * /usr/bin/wget -O - -q -t 1 http://domene.com/script.php

Her kjører da kommandoen hver gang minuttet er 0 og timen er 23. Dette skjer hver eneste dag i måneden, hver eneste måned og hver eneste dag. Om man kun ville kjørt kommandoen 23:00 på mandager, så hadde man endret til:

0 23 * * 1 /usr/bin/wget -O - -q -t 1 http://domene.com/script.php

Legg merke til at vi bruker hele filbanen (path) til wget. Dette er normal praksis når man legger inn kommandoer i crontab. Path til den kommandoen du skal kjøre, får du ved å kjøre denne kommandoen:

:~$ which wget

Videre kommer diverse options, da syntaks for wget er som følger:

wget [option]... [URL]...

Få mail med output fra scriptet

Hvis scriptet lager output, feks via PHP-kommandoen print, så kan man få epost med output ved å legge til følgende i cron:

MAILTO=din@epost.com

Kommentering i crontab

For å minne degselv på hvilke oppgaver kommandoer gjør, kan du bruke kommentering. Dette gjøres ved å bruke nummertegnet foran kommentaren, feks slik:

# Kjører script for å slette brukere
0 23 * * 1 /usr/bin/wget -O - -q -t 1 http://domene.com/script.php

Lagring av endringer i crontab

For å lagre de nye innstillingene under crontab, klikk Ctrl + X på tastaturet. Du vil da bli spurt om å lagre endringene.

Klikk Y etterfulgt av Enter for å svare ja, eller N for å svare nei.

Svar på forumemnet

(If you're a human, don't change the following field)
Your first name.
Innholdet i dette feltet blir holdt privat og vil ikke bli vist offentlig.