cron daemon / crontab command / at
achtergrond: ubuntu howto cron
achtergrond: tuxradar.com/content/automate-linux-cron-and-anacron
opdracht:
schrijf een script (als root) dat een backup maakt van /home en alles erin op een extra harde schijf (/dev/sdb), geformatteerd in ext3 en gemount in /backup. Gebruik tar.bz2 formaat.
- aanmaken van de harde schijf
In uw virtuele omgeving verbind je een extra harde schijf van 100GB aan je virtuele machine.
Na opstarten doe je eengdiskop die harde schijf en maak je 1 enkele partitie over de volledige schijf:
$ sudo parted /dev/sdb print [sudo] password for bert: Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 107GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 107GB 107GB ext3 Linux filesystem
Formatteer daarna in ext3 of ext4:
$ sudo mkfs.ext3 /dev/sdb1mke2fs 1.42.9 (4-Feb-2014) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 6553600 inodes, 26214139 blocks 1310706 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 800 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
Maak een mountpoint,/backup
plaats/dev/sdb1daarna in/etc/fstab:
$ sudo mkdir /backup
$ sudo vim /etc/fstab# <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation UUID=990f7a23-5364-4fde-8edf-83e213ae88af / ext4 errors=remount-ro 0 1 # we zetten de 100G backup disk onderaan ... /dev/sdb1 /backup ext3 defaults 0 0Met
sudo mount -akun je defstabtesten,
metdfkun je zien of het gelukt is ...
Als je linux heropstart, ben je zeker dat het gelukt (of mislukt) is ...
- crontab
We voerencrontab -euit als sudo:
$ sudo crontab -e# Edit this file to introduce tasks to be run by cron. # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command * * * * * /etc/cron.d/backup.sh* every minute * every hour * every day of month * every month * every day of week (0 is sunday, 1 is monday, ... 6 is saturday and 7 is sunday again)
We hebben een script,backup.shgeplaatst in de directory,/etc/cron.d#!/bin/bash # # starting backup filenaam="homebu-$(date +"%m-%d-%Y-%T").tar.bz2" echo $filenaam tar -cvjf /backup/$filenaam /home # end of backup- let op:
crontabzal meestal geen script uitvoeren zonder shebang
#!/bin/bash - in het script introduceren we een variabele
filenaamwaarin we een datum en tijd plaatsen.
filenaam="homebu-$(date +"%m-%d-%Y-%T").tar.bz2" - de eigenlijke backup is een
tar -cvjdie een bzip2 bestand maakt van/home,
tar -cvjf /backup/$filenaam /home
test je script met:
$ sudo /etc/cron.d/backup.sh
- let op:
crontabtesten
Om te testen hebben we daarnet aancrontab -egevraagd
om elke minuut een backup uit te voeren ...
We kunnen vervolgens kijken of die backup gemaakt is ...
je kan dat monitoren metwatch:
user@mint18-201 ~ $watch ls -l /backup/Every 2.0 seconds: ls -l /backup/ Wed Jan 24 14:27:48 2018 total 1280132 -rw-r--r-- 1 root root 738612817 Jan 24 14:14 homebu-01-24-2018-14:12:07.tar.bz2 -rw-r--r-- 1 root root 152361487 Jan 24 14:18 homebu-01-24-2018-14:17:49.tar.bz2 -rw-r--r-- 1 root root 152359444 Jan 24 14:22 homebu-01-24-2018-14:22:01.tar.bz2 -rw-r--r-- 1 root root 152359444 Jan 24 14:24 homebu-01-24-2018-14:24:01.tar.bz2 -rw-r--r-- 1 root root 115130368 Jan 24 14:25 homebu-01-24-2018-14:25:01.tar.bz2 drwx------ 2 root root 16384 Jan 24 14:00 lost+foundzodra de backups verschijnen (dat gaat nogal vooruit, ... elke minuut) ...
kun je decrontabinstellen op een normale dagelijkse of wekelijkse frequentie ...# # m h dom mon dow command 23 4 * * 2 /etc/cron.d/backup.sh ## 23 4 * * 2: elke dinsdag om 4u23 amTenslotte moeten we de tar-backup onderzoeken:
- eerst met
tar -tvf <filenaam> - daarna kun je een restore doen naar een testdirectory om zeker te zijn dat je backup compleet is
- backups moeten regelmatig worden getest en gerestored om te zien of het proces loopt zoals voorzien.
In mijn geval zijn er problemen: een backup testen of terugzetten loopt vast op de ":" (dubbele punt) in de file-naam:
$sudo tar -tvf homebu-01-24-2018-14\:34\:01.tar.bz2
tar: Cannot connect to homebu-01-24-2018-14: resolve failed
Dit kunnen we oplossen met de optie--force-local:
$sudo tar -xvf "homebu-01-24-2018-14:34:01.tar.bz2" --force-local
- eerst met
- alternatieve crontab
De crontab -e is een per user scheduler.
Deze kan je eventueel vinden in/var/spool/cron/crontabs/
De/etc/crontabis een algemene scheduler, vooral voor systeemprocessen. Die zou je ook kunnen gebruiken voor backups.
Een moderne linux-omgeving voorziet bovendien in enkele directories:drwxr-xr-x 2 root root 4096 Jan 4 02:30 /etc/cron.daily drwxr-xr-x 2 root root 4096 Dec 13 2016 /etc/cron.hourly drwxr-xr-x 2 root root 4096 Dec 13 2016 /etc/cron.monthly drwxr-xr-x 2 root root 4096 Sep 19 10:06 /etc/cron.weeklywaarin je gratuit scripts kunt plaatsen die dan zonder enige configuratie automatisch elk uur, dag week of maand worden uitgevoerd. Het volstaat je script in één van deze directories te plaatsen. Het script moet dan wel aan enkele stricte voorwaarden voldoen:
As you've probably seen in the comments to your question, the cronjobs in /etc/cron.hourly (and the other, similar directories) are executed by run-parts. run-parts is a little picky about filenames. By default it doesn't execute files whose filenames contain anything other than (all of those from ASCII)- uppercase letters
- lowercase letters
- digits
- underscores
- dashes ("minus signs")
So if your script has a filename of for example "myscript.sh", it just is ignored, because run-parts does not like the dot. --- Apr 19 '15 at 22:05 -- Henning Kockerbeck
- syslog
tail -flaat dynamisch de staart van een bestand zien, in dit geval de/var/log/syslog
$ sudo tail -f /var/log/syslogDec 1 10:03:01 apa-ub14 CRON[1953]: (CRON) info (No MTA installed, discarding output) Dec 1 10:11:01 apa-ub14 cron[1945]: (*system*) RELOAD (/etc/crontab) Dec 1 10:17:01 apa-ub14 CRON[1977]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Dec 1 10:23:15 apa-ub14 kernel: [59003.611457] init: cron main process (1945) killed by TERM signal Dec 1 10:23:15 apa-ub14 cron[2115]: (CRON) INFO (pidfile fd = 3) Dec 1 10:23:15 apa-ub14 cron[2116]: (CRON) STARTUP (fork ok) Dec 1 10:23:15 apa-ub14 cron[2116]: (CRON) INFO (Skipping @reboot jobs -- not system startup) Dec 1 10:25:01 apa-ub14 CRON[2199]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Dec 1 10:28:01 apa-ub14 cron[2116]: (*system*) RELOAD (/etc/crontab) Dec 1 10:30:01 apa-ub14 CRON[2333]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly) Dec 1 10:35:01 apa-ub14 CRON[2362]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
In deze syslog is o.a. te zien wanneer er een cron-job wordt uitgevoerd.
In het voorbeeld werdcron.hourlyverchillende keren kort na mekaar uitgevoerd. Om te debuggen hadden we in de/etc/crontabtelkens opnieuw het tijdstip van aangepast:
17 * * * * root cd / && run-parts --report /etc/cron.hourly
Hoewelcron-hourlyperfect liep werd ons script toch niet uitgevoerd.
Het script was executable, eigendom van root, had een shebang, maar bevatte een punt in de filenaam, en dat mag niet ...
- at
http://www.computerhope.com/unix/uat.htm