Automatisera aktiviteter i Linux med cron-jobb

Inledning

De flesta operativsystem har stöd för någon typ av schemalagda aktiviteter. Cron-jobb är ett enkelt men kraftfullt sätt att schemalägga automatisk körning av kommandon eller skript i Linux eller Unix (BSD, macOS med flera).

Här är ett exempel på ett cron-jobb som lägger till en rad med datum och tid varje timma till en fil:

 * 1 * * * /bin/date >> /tmp/datumtid.txt

Schemat för olika jobb finns i en konfigurationsfil kallad “crontab". Ordningen för de olika fälten i crontab ser ut så här:

  • Minut
  • Timme
  • Dag i månad
  • Månad
  • Veckodag
  • Kommando

Tillåtna värden för de olika fälten är:

Minut         0 till 59
Timme         0 till 23
Dag i månad   1-31
Månad         1-12
Veckodag      0-6
Kommando      Kommandot du vill köra.

Exempel på ett cron-jobb i Magento

Nedan följer ett lite mer avancerat exempel på ett cron-jobb för en Magento-installation som ska köras varje dag kl. 23.30. Syftet med cron-jobbet är att tömma mappen med sessionsfiler vilka genereras kontinuerligt. Dessa tar upp onödigt diskutrymme och kan leda till att diskutrymmet tar slut. Vi beskriver även vad vi önskar göra med resultatet.

Så här ser vårt cron-jobb ut:

30 23 * * * /usr/bin/find /var/www/magento/var/session/ -type f -name 'sess*' -mtime +14 -delete

Vad gör cron-jobbet?

Vi vill hitta alla filer som matchar sess* i mappen /var/www/magento/var/session/ som är över 14 dagar gamla. Vi önskar att cron-jobbet tar bort alla dessa filer och skickar utdata till /dev/null. Även eventuell utdata från terminalen eller felmeddelanden kommer att kastas genom att skicka dem till /dev/null.

Exempel på olika sätt att hantera resultatet

Om du vill ha bekräftelse via e-post på att cron-jobbet har körts lägger du till följande i crontab:

MAILTO="user@example.com"
*/30 * * * * /usr/bin/php /home/httpd/user/exempel.se/cron.php

Vill du skicka loggen på cron-jobbet till en fil skriver du så här:

*/30 * * * * /usr/bin/php /home/httpd/exempel.se/cron.php > /var/log/crontab_log.log

Önskar du köra cron-jobbet var 30:e minut, stänga av utdatan (både stdout och stderr) och inte önskar att det skickas några mejl om slutfört eller missat jobb:

*/30 * * * * /usr/bin/curl "http://www.exempel.se/cron.php" &> /dev/null

Så här skriver du kommandot för äldre versioner av Bash:

*/30 * * * * /usr/bin/curl "http://www.exempel.se/cron.php" > /dev/null 2>&1

Har du frågor?

Om du har några frågor eller funderingar om cron-jobb så tveka inte på att kontakta vår support på support@glesys.se.

Hittar du inte det du söker?

Kontakta oss gärna för mer information. Vi hjälper dig att komma fram till den bästa lösningen för dina behov.

Skicka e-post Ring 0200-23 88 00