Crontab
Köra skript automatiskt
Säg att du vill göra en kalkyl en gång per dygn eller hämta hem någonting en gång per vecka. Hur löser du det?
❶ Skapar ett skript som gör det du vill göra
❷ Dubbelkolla att skriptet verkligen fungerar
❸ Lägger in skriptet i crontab
Den enklaste genvägen, för att allting ska fungera så snabbt som möjligt är faktiskt att ta omvägen över att faktiskt kontrollera att skriptet fungerar.
Skriva och testköra ett skript
Det är viktigt att veta att skripten som startas av crontab kör i en linuxmiljö och att alla interpretatorer och anrop anges med
absoluta sökvägar (fullständiga sökvägar).
Vi tänker oss något enkelt exempel. Vi vill tanka ner RSS från NASA som innehåller "dagens bild". Så, vi laddar hem denna RSS och placerar i katalogen och sedan skriver vi ett litet PHP -skript som läser denna RSS -fil. RSS -filen uppdateras automatiskt 1 gång per dag med crontab, så vi har alltid en aktuell sida med dagens bild från NASA.
För att hämta hem en fil över internet kan vi använda
wget. Med absolut sökväg ser anropet ut såhär.
wget -O /home/karlahosti/public_html/nasa.xml https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss
Vi testar att skriptet verkligen fungerar. Så jag
loggar in med ssh.
Någonting har blivit hämtat. Jag öppnar filen som hämtats med
nano nasa.xml och det ser väldigt XML -aktigt ut som en RSS -fil skall göra.
Vi kan snegla på hur stor filen är
ls -al nasa.xml och det ser ju hanterbart ut.
Uppmuntrade av att vårt skript fungerar, så stoppar vi in det i
crontab.
Klickar på
Cron Jobs
Klickar på
Create Cron Job.
Skriptet skall köra varje gång klockans
Hour -siffra (tim -visaren alltså) slår över till 8. Dvs, klockan 8 på morgonen. Under
Command knappar vi in anropet
wget -O /home/karlahosti/public_html/nasa.xml https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rssSedan
klickar vi
Create.
Konceptet här är ganska enkelt. Beroende på vilken frekvens (hur ofta) och vid vilken tidpunkt vi vill att skriptet skall köras, så stoppar vi in en siffra här någonstans.
Hursomhelst. Nu ligger vårt
cronjob i listan över våra cronjobs ....
För att publicera vår RSS -fil (på XML -format) skriver vi ett litet PHP -skript.
<?php
if (file_exists('nasa.xml'))
{
$xml = simplexml_load_file('nasa.xml');
foreach($xml->channel->item as $item)
{
$lnk = $item->link;
$tle = $item->title;
echo '<a href="'.$lnk.'" target="new">'.$tle.'</a><br/>';
}
}
else
{
exit('Lyckades inte öppna nasa.xml.');
}
?>
Här är då resultatet:
Dagens bild från NASA.
Perl, PHP, m.fl. -skript
Det viktiga är enbart att full sökväg anges. Det gäller även interpretatorn, t.ex. perl.
Vi tänker oss något enkelt testskript som vi kallar
perltest.pl som ligger i katalogen
public_html/
#!/usr/bin/perl
use strict;
use warnings;
print "Karla hosting was here\n";
Fulla anropet som skall in i
crontab är alltså
/usr/bin/perl /home/karlahosti/public_html/perltest.pl
Vi kan titta efter var PHP -interpretatorn ligger med
which php och knacka in en litet skript.
<?php
echo "Karlahosting was here...";
?>
Den fullständiga sökvägen om vi vill lägga in detta i crontab blir alltså
/usr/local/bin/php /home/karlahosti/public_html/phptest.php
I verkligheten är det förstås inte meningsfullt om skripten skriver ut något utan förslagsvis behandlar de data i filer eller hämtar något eller
kopierar något eller gör något annat meningsfullt.