Cronjob

cronjob voor specifieke user

crontab -u username -e

<minuten> <uren> <dagen> <maanden> <weekdagen> <commando>

Deze 6 kolommen kun je weer opdelen in 2 groepen, namelijk het “wanneer” en het “wat”. Het “wat” is het eenvoudigst, maar toch weer lastig. Het is namelijk gewoon een commando zoals je dat ook op de CLI zou kunnen opgeven. Op Unix systemen is cron een veelgebruikt programma om bijvoorbeeld logbestanden te archiveren. Je kunt voor <commando> dus alles invullen wat op de CLI ook werkt, mits de gebruiker die de cron uitvoert ook gerechtigd is om het programma uit te voeren. Je kunt hiermee dus bijvoorbeeld ook mysqldump uitvoeren om een backup van je database te maken, want dat doe je uiteraard niet met een PHP script. Let er op dat als je de inloggegevens van je database meegeeft aan mysqldump, dat deze dan tijdens het uitvoeren voor iedereen met toegang tot de CLI leesbaar kunnen zijn. Hoe je nu PHP scripts uit kan voeren met cron leg ik later uit. Het “wanneer” is dus verdeeld in 5 kolommen en elke kolom kan op dezelfde manier worden ingevuld. Voor het aangeven van de momenten waarop de cronjob moet worden uitgevoerd kun je gebruik maken van getallen, het sterretje (*) als wildcard, de komma (,) om waardes te plakken, het minteken (-) om een range aan te geven en de slash (/) voor intervallen. Aan de hand van wat voorbeelden wil ik duidelijk maken hoe je de cronjob kan instellen qua tijd.

0 and 7 stand for Sunday
6 stands for Saturday
so, 1-5 means from Monday to Friday

Elke vrijdag (5) die op 3 april (4) valt om 1 minuut over 2

1 2 3 4 5

Elke dag om half 5 's nachts

30 4 * * *

Elke dag om half 5, half 6 en half 7 30 4-6 * * * 30 4-8/2 * * * Elke dag om half 5, half 7 en half 9
30 4,6,8 * * * Elke dag om half 5, half 7 en half 9
0 15,20 * */2 1-5 Wordt op werkdagen in de even maanden op elke dag (van de maand) uitgevoerd om 15:00u en om 20:00u.
*/10 8-16,22 * * * Het commando wordt elke 10 minuten uitgevoerd tussen 8:00u en 16:59u en tussen 22:00u en 22:59u.

* Instelling voor focus (elke dag om 05:00)

0 5 * * * /home/pvi/backup.sh

Werkinstructie

# crontab -u username -e of crontab -e

dit opent de editor, plak/tik nu het croncommando, en sla het bestand op

0 5 * * * /home/pvi/backup.sh

Start crond opnieuw

# /etc/init.d/cron restart

Kijk welke cronjobs actief zijn:

# crontab -l

Waar staan de crontab files:

/var/spool/cron/crontabs#

backup.sh

#!/bin/bash
# This is my backup file - created by PVi
# cronjob needs to be started by root
# $ crontab -e (as root)
# add next line to cronfile:
# 0 5 * * * /home/pvi/backup.sh
# <minuten> <uren> <dagen> <maanden> <weekdagen> <commando>
# 05:00 uur elke-dag elke-maand iedere-weekdag /home/pvi/backup.sh
# Setting timestamp for filename
TIMESTAMP=`date +%Y%m%d.%H%M`
# Setting source and destination directory
SRC_DIR="/home/pvi/test/"
DEST_DIR="/home/pvi/backup/"
# Adding a name to output file
FNAME="Focus"
# Setting logfile name
LOG="/home/pvi/backup/$TIMESTAMP-$FNAME.log"
# Creat logfile
echo -e "Starting backup of $FNAME $SRC_DIR directory" >> ${LOG}
# Creating gzip tar file
tar -vczf ${DEST_DIR}/${TIMESTAMP}-${FNAME}.tar.gz ${SRC_DIR} >> ${LOG}
# v : Verbose output (show progress).
# c : Create a tar ball.
# z : Use gzip
# f : Output tar ball archive file name.
# x : Extract files
# Ending backup
echo -e "Ending backup of $FNAME $SRC_DIR" >> ${LOG}
# Remove files older than 5 days
echo -e "Removing any old files" >> ${LOG}
find /home/pvi/backup/* -mtime +5 >> ${LOG}
find /home/pvi/backup/* -mtime +5 -exec rm {} \;
# How do we get files back in case of emergency
# Untar complete : $ tar -vzxf source.tar.gz -C /destination/folder
# Untar specific file : $ tar -xpvf source.tar.gz home/pvi/test/sub1/sub12/sub12.txt "in current dir"
# Untar specific dir : $ tar -xpvf source.tar.gz home/pvi/test/sub1 "in current dir"