Luento 4
virt-install - oikeudet
- virt-install osaa luoda tiedoston levyimageksi jos sitä ei ole, mutta se vaihtaa sen omistajaa ja oletuksena jättää lukuoikeudet vain itselleen, joten sitä eivät muut voi kopioidakaan – käyttökelpoinen vain jos olet root. Mutta jos image on valmiiksi tehty, omistaja vaihtuu mutta suojaukset eivät. Imagen luonti etukäteen:
- qemu-img -f qcow2 kone.img 3G
levyformaatit
- KVM-qemu tuntee useita levyformaatteja. Parhaiten tuettu ja yleensä helpoimmin toimiva on qcow2; toinen yleinen on raw.
- (qcow2 = qemu copy-on-write version 2,
- qemu = Quick EMUlator)
virt-install/virsh etäkäyttö
- Kone, jossa virt-install ajetaan voi olla eri kuin se, johon virtuaalikone luodaan:
- virt-install --connect qemu+ssh://lonkaX/system -n tunnus1 --memory …
- Myös virsh ja virt-viewer toimivat etänä samalla syntaksilla
- ssh-yhteydet on valmisteltava etukäteen (authorized_keys)
- Levyimage luotava etukäteen (qemu-img create...)
Varmuuskopiointi: image
- Sammuta virtuaalikone ensin - elävästä koneesta otettu kopio ei ole koherentti - ja:
- cp kone1.img kone1.img.bak
- Voidaan myös siirtää toiseen alustakoneeseen (xml-tiedosto siirrettävä myös, virsh dumpxml...)
Varmuuskopiointi: image
- Tiedostojen omistaja muuttuu kun virtuaalikone käynnistetään, palautus esim.
- rm -f kone1.img; cp kone1.img.bak kone1.img
- tai
- cp -f kone1.img.bak kone1.img
Varmuuskopiointi: image
- ei säännöllinen varmuuskopiointitapa, vain poikkeustilanteissa, levyimagea siirrettäessä tai ennen versiopäivitystä tai jotain ”tämä saattaa rikkoa kaiken” -säätöä
- polun vaihtuessa muutettava xml-tiedostoa (virsh edit, tai virsh dumpxml...define)
Muistin kopiointi: virsh save
- Joskus halutaan kopio käynnissä olevan koneen tilasta (RAM &c), sen voi tehdä näin:
- virsh save kone tiedosto
- Kone ”hibernoi”, jatkaa komennolla
- virsh restore tiedosto
Muistin kopiointi: virsh save
- Samasta tiedostosta voi palauttaa monta kertaa ”samaan ajanhetkeen”; levyimage on tällöin talletettava ja palautettava erikseen
- Joskus kätevä ennen vaarallisia kokeiluja
- Voi vaihtaa alustakonetta, mutta käyttöjärjestelmän ja kirjastojen oltava kyllin samanlaisia kuin talletettaessa
loop device
Mountataan tiedosto kuin se olisi levy:
mount /tmp/disk.img /mnt/tmp -t ext4 -o loop=/dev/loop3
Käytetään tiedostoa kuin se olisi levy:
losetup -f /dev/loop0 file.img
(yleensä tehtävä roottina tai sudo ...)
loop device 2
Partitiot näkyviin:
kpartx -a /dev/loop0
Mountataan em. tiedoston 1. partitio:
mount /dev/mapper/loop0p1 /mnt/tmp
Vapautetaan:
umount /mnt/tmp; losetup -d /dev/loop0
Virtuaalilevyn suurentaminen 1
- Edellyttää yleensä aina boottia. Vaarallinen!
- Vaiheet:
- (1) Suurennetaan levyimage
- (2) Muutetaan partitiointia
- (3) Suurennetaan tiedostojärjestelmä(t) ja swap
Virtuaalilevyn suurentaminen 2
- virsh shutdown kone # jatkuu alustakoneessa
- mv kone.img kone.img.bak
- cp kone.img.bak kone.img
- (ensin mv jotta saadaan kirjoitusoikeudet kohdalleen)
- qemu-img resize kone.img +2GB
Virtuaalilevyn suurentaminen 3
- virsh start kone # jatkuu virtuaalikoneessa
- sudo fdisk -c -u /dev/vda1 # tai parted
- poistetaan kaikki partitiot ja luodaan uusiksi, root-partition alun pitää säilyä täsmälleen ennallaan (swap voi siirtyä, muut jos siirtää datankin), samoin tyyppien ja boot-lipun; voi myös lisätä uusia partitioita. Huom. vaikuttaa vasta bootin jälkeen!
Virtuaalilevyn suurentaminen 4
- sudo shutdown -r now
- sudo resize2fs /dev/vda1; df
- grep swap /etc/fstab
- # cut'n'paste UUID= ... edeltä tai:
- eval $(awk '/UUID.*swap/{print $1}' /etc/fstab)
Virtuaalikoneen suurentaminen 5
- sudo mkswap -U $UUID /dev/vda5
- sudo swapon -a; cat /proc/swaps
- shutdown -r now # varmuuden vuoksi
- rm -f kone.img.bak # alustakoneessa
- (kun on varmistettu että kaikki ok)
Virtuaalilevyn suurentaminen 6
- Jos on root-oikeudet (sudo) alustakoneessa, toinen tapa:
- virsh shutdown kone
- losetup -f # tulos (/dev/loop2 tms) talteen, käytetään alla
- losetup -f /dev/loop2 kone.img
Virtuaalilevyn suurentaminen 7
- kpartx -a /devloop2 # partitiot näkyviin
- eval $(blkid /dev/mapper/loop2p5 | awk '{print $2}')
- # UUID talteen
- kpartx -d /dev/loop2 # partitiot pois, muuttuvat alla
- fdisk /dev/loop2 # partitioi, root-partition alku ennallaan
Virtuaalilevyn suurentaminen 8
- kpartx -a /dev/loop2 # uudet partitiot näkyviin
- e2fsck -f /dev/mapper/loop2p1 # varmuuden vuoksi
- resize2fs /dev/mapper/loop2p1
- mkswap -u $UUID /dev/mapper/loop2p5
- # swap UUID joka talletettiin edellä
Virtuaalilevyn suurentaminen 9
- kpartx -d /dev/loop2
- losetup -d /dev/loop2
- virsh start kone
- # helpotuksen huokaus tai ...
Virtuaalilevyn suurentaminen 10
- Jos levyä joutuu suurentamaan tällä tavoin, jotain on mennyt pieleen suunnitteluvaiheessa. Vaihtoehtona kannattaa harkita uudelleenasennusta.
- Jos levyjen ja osioiden ennakoidaan muuttuvan, LVM on yleensä hyvä idea.
Ubuntun päivitys
- sudo apt-get update; sudo apt-get dist-upgrade
- säännöllisesti, ja aina kun tietoturva-aukkoja tiedossa
- automatisointi:
- /etc/apt/apt.config.d/50unattended-upgrades
- dpkg-reconfigure unattended-upgrades
Ubuntun päivitys
- Käyttöjärjestelmäversion päivitys:
- sudo do-release-upgrade
- muistia pitää olla riittävästi, samoin levytilaa
- jos do-release-upgrade -komentoa ei löydy:
- sudo apt-get install update-manager-core
Ubuntun päivitys
- Vain LTS-versioiden välillä vai kaikki:
- /etc/update-manager/release-upgrades:
- ”Prompt=” lts, normal
- Päivityksen jälkeen apt-get autoremove
command expansion, eval
- Komennon tulos merkkijonoon:
- year=$(date +%Y); month=$(date +%m)
- day=`date +%d` # vanha tapa, ei suositeltava
- files=$(ls -l $(grep -l kala *.txt))
command expansion, eval
- Merkkijono komennoksi:
- eval $(date '+year=%Y month=%m day=%d')
- x=ls; $x # toimii
- x='y=z'; $x # ei toimi
- x='y=z'; eval $x; echo $y # toimii
for-loop, parameter expansion
for i in 1 3 5 7 ; do touch koe$i.txt ; done
for x in a b c ; do echo $x > ${x}koe.txt ; done
for f in *.txt ; do cp $f $f.bak ; done
for-loop, parameter expansion
for f in *.txt ; do cp $f ${f%.txt}.bak ; done
for f in *.txt ; do cp $f ${f/txt/bak} ; done # bash
for f in a* ; do mv $f b${f#a} ; done
for-loop, parameter expansion
for n in {0..7} ; do mkdir d$n ; done # bash
for d in d{0..7} ; do mkdir $d ; done # bash
touch koe{1..7..2}.txt # bash
Uudelleensuuntaus, redirection
- Komento >tiedosto 2>virheet
- Komento 1>&2
- 0=stdin, 1=stdout, 2=stderr
- 3...9 vapaasti käytettävissä
redirection, read
while read suku etu login demo ; do
echo $login $etu $suku; id $login
done < kurssilaiset.txt
redirection, read
while read suku etu login demo ; do # ei toimi!
echo ${login}1; ssh ${login}1 'dpkg -l | grep acpid'
done < kurssilaiset.txt
redirection, read
while read <&3 suku etu login demo ; do # toimii
echo ${login}1; ssh ${login}1 'dpkg -l | grep acpid'
done 3< kurssilaiset.txt
grub
- ”GRand Unified Bootloader”: lataa käyttöjärjestelmän (kernel+initramfs)
- /etc/default/grub
- GRUB_DEFAULT # oletusboottivalinta
- GRUB_HIDDEN_TIMEOUT # viive ennen menun näyttämistä Esc-näppäimellä
- GRUB_HIDDEN_TIMEOUT_QUIET # true=ei näytetä sekuntilaskuria
- HIDDEN-asetukset yleensä paras kommentoida pois
grub
- GRUB_TIMEOUT # aika menusta oletusboottiin
- GRUB_TIMEOUT_STYLE # menu, hidden, countdown
- GRUB_CMDLINE_LINUX_DEFAULT # normaali boot komentorivi
- GRUB_CMDLINE_LINUX # boot komentorivi, myös recovery)
- ”quiet splash” pitää poistaa jos haluaa nähdä boottiviestit
grub
- GRUB_TERMINAL=console # grub tekstikonsolille
- /etc/grub.d/, /boot/grub/grub.cfg, /boot/grub/custom.cfg
- Muutosten jälkeen komento update-grub
/boot, kernel, initramfs
- grub (tai muu bootloader) paikassa, josta BIOS (tai UEFI tai virsh start...) sen löytää
- grub tietää mistä kernel ja initramfs löytyvät, yleensä /boot
- jos grub pitää saada uudelle laitteelle:
- grub-install laite
/boot, kernel, initramfs
- initramsf (initial RAM filesystem) on ramdisk, josta löytyvät tiedostot, joita tarvitaan bootissa ennen varsinaisen tiedostojärjestelmän mounttaamista (kernel modulit, RAID-konfiguraatiot jne); /etc/initramfs-tools/
- Ei välttämätön jos bootissa ei tarvita mitään mitä kernel ei jo osaa (ilman moduleita)
/boot, kernel, initramfs
- jos initramfs:ää pitää muuttaa (RAID-konfiguraatio muuttunut tms):
- update-initramfs -u
- initramfs on gzip-pakattu cpio-archive, tutkittavissa esim. näin:
- zcat /boot/initrd... | cpio -i
Run levels
- Järjestelmän ”taso”, järjestelmäprosessien joukko
- SystemV: /etc/inittab
- upstart: /etc/init/rc-sysinit.conf
- systemd: /etc/systemd/system/*target*
Run levels
- Perinteiset tasot (merkitykset vaihtelevat, etenkin 2-5):
- 0 Halt
- 1 (tai S) Single-user
- 2 Multi-user
- 3 Multi-user with networking
- 5 Multi-user with networking and graphical UI
- 6 reboot
- telinit level, telinit q (eivät nykyisin yleensä tarpeen)
System startup & shutdown
- Useita erilaisia ja eri-ikäisiä menetelmiä:
- Vanha Unixin init-script setup (SysV): /etc/init.d
- Upstart (Ubuntu, Fedora, ChromeOS): /etc/init
- Systemd (melkein kaikki nykyisin): /etc/systemd
- Vanhat käynnistysskriptit viritettävissä toimimaan uudempien kanssa => kaikkia näkee sekaisin
System startup & shutdown
- SysV-init, ”klassinen” init-script setup: RHEL -6 ym:
- /etc/init.d/proggis.sh [start|stop|restart...]
- /etc/rc?.d/{Snn,Knn}proggis
System startup & shutdown
- upstart: Ubuntu 6.10-14.10, Fedora 9-14, ChromeOS:
- service proggis [start|stop|restart...]
- start proggis
- /etc/init/proggis
System startup & shutdown
- systemd: Fedora 15-, Debian 8-, RHEL 7-, Ubuntu 15.04- …
- init + udev + syslog + cron…
- /etc/systemd/system
- Käynnistysasetuksia: /etc/default/...
Asennus: konsolit
- Virtuaalikonsolia käytettäessä voi asennuslokia seurata reaaliajassa neljännessä konsoli-ikkunassa (Alt-F4 tai Ctrl-Alt-F4, graafisen virtuaalikonsolin kanssa Send key/Ctrl+Alt+F4) tai tutkia taaksepäin toisessa ja kolmannessa (Alt-F2, Alt-F3), esim.
- more /var/log/syslog.log
Asennus: konsolit
- Sarjaporttikonsolin kanssa käytettävissä ei ole useampia konsoli-ikkunoita, mutta asennusvalikossa on “Execute a shell”, johon joskus pääsee...
- Lokissa on yleensä aina virheeltä näyttäviä viestejä jotka eivät oikeasti ole vakavia; kannattaa tutkia onnistuneidenkin asennusten lokeja
Asennus: konsolit
- Konsoleita voi olla useita, erityisesti sekä sarjaporttikonsoli että (virtuaalinen) graafinen konsoli; --extra-args -optiolla (tai -x) annetuista console= -asetuksista viimeinen on ensisijainen (/dev/console); esim.
- -x 'console=tty0 console=/dev/ttyS0,115200n8 serial'
- -x (--extra-args) ei toimi --cdrom -option kanssa, mutta roottina voi tehdä --location /jotain/ubuntux.iso -x ...
Asennus: konsolit
- Jos virt-install -komennolle määrittelee sarjaporttikonsolin mutta ei '--graphics none', konsoliviestit saattavat kuitenkin mennä graafiseen virtuaalikonsoliin; jos X-yhteyttä ei ole, siihen voi ottaa yhteyden virt-viewer -komennolla toisesta ikkunasta; joskus taas voi olla tarpeen avata uusi sarjaporttikonsoli komennolla virsh console kone
Asennus: konsolit
- Toisen konsolin voi lisätä myös jälkikäteen (virsh edit...) ja se on yleensä parempi ratkaisu, asennus kahden konsolin kanssa käyttäytyy joskus oudosti. Sarjaporttikonsoli on helpompi lisätä jälkeenpäin kuin graafinen.
Asennus: konsolit
- Sarjaporttikonsolin määritys xml:ssä:
- <serial type='pty'>
- <target type='serial' port='0'>
- </serial>
- <console type='pty'>
- <target type='serial' port='0'>
- </console>
Asennus: konsolit
- Ubuntu 16.4:ssä (ainakin) sarjaporttikonsoli tulee xml:ään aina, se vain pitää aktivoida VM:ssä:
- Em. säädöt saattaa joutua tekemään (ssh-yhteyden yli) vaikka asennusvaiheessa olisi jo käytetty sarjakonsolia
Asennus: konsolit
- Grub sarjaporttikonsolin kanssa: /etc/default/grub
- GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"
- GRUB_TERMINAL=serial
- GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no –stop=1"
- Kaikki “HIDDEN_TIMEOUT” -rivit kannattaa myös kommentoida pois ja GRUB_TIMEOUT -aikaa ehkä pidentää
- Editoinnin jälkeen update-grub
Asennus: konsolit
- Graafisen konsolin määritys xml:ssä (pci slot-osoitteita voi joutua vaihtamaan):
- <channel type='spicevmc'>
- <target type='virtio' name='com.redhat.spice.0' state='disconnected'/>
- <alias name='channel0'/>
- <address type='virtio-serial' controller='0' bus='0' port='1'/>
- </channel>
- <input type='mouse' bus='ps2'/>
- <input type='keyboard' bus='ps2'/>
- <graphics type='spice' port='5905' autoport='yes' listen='127.0.0.1'>
- <listen type='address' address='127.0.0.1'/>
- <image compression='off'/>
- </graphics>
Asennus: konsolit
- <video>
- <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1'/>
- <alias name='video0'/>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
- </video>
- <redirdev bus='usb' type='spicevmc'>
- <alias name='redir0'/>
- </redirdev>
- <redirdev bus='usb' type='spicevmc'>
- <alias name='redir1'/>
- </redirdev>
Asennus: konsolit
- Sarjaporttikonsoliin voi kytkeytyä uudesta ikkunasta:
- tai etänä alustakoneeseen host lisäämällä optio
- --connect qemu+ssh://host/system
Asennusongelmia: lokit
- Asennuksen keskeytyessä outoon virheeseen:
- grep -i error /var/log/syslog |more
- grep -i “no space” /var/log/syslog
- grep -i failed /var/log/syslog
- dmesg | more
Asennusongelmia: lokit
- Kannattaa etsiä lisätietoa grepillä löydetyn virheen ympäriltä; jos (vanhan) busyboxin grep ei tunne -A ja -B optioita eikä sen more /-hakua, usein joutuu greppaamaan aikaleimaa tms
Asennusongelmia: levytila
- Levytilan täyttyminen voi aiheuttaa hyvin monenlaisia virheitä ja aiheutua satunnaisista tekijöistä (käytetty repository, vaihtelu verkon nopeudessa, jopa koneen nimi – pitempi nimi tuottaa enemmän tekstiä lokiin!)
Asennusongelmia: levytila
- Asennuksen keskeytyessä täyttynyt levy ei ehkä enää olekaan täynnä (erityisesti /var), virheilmoitusta kannattaa etsiä lokista
- Jos jokin levyosio täyttyy, asennus on yleensä aloitettava alusta tai ainakin levyosioinnista; joskus loogisen volumen laajennus “lennosta” riittää
Asennusongelmia: RAM
- Keskusmuistin loppuminen kesken asennuksen saattaa aiheuttaa outoja virheitä.
- Jos muistia ei voi lisätä, joskus auttaa kun asentaa vähemmän paketteja (ja toivoo niiden asentamisen onnistuvan myöhemmin).
- Graafinen konsoli syö enemmän muistia kuin sarjaportti (--graphics none säästää hieman).
Disaster recovery: /usr lost
- Rikotaan /usr (oletetaan ettei se ole oma tiedostojärjestelmänsä):
- sudo mv /usr /oldusr
- # sudo ei enää toimi!
Disaster recovery: /usr lost
- Pelastus jos on sudo alustakoneessa:
- virsh destroy mailkang1 # shutdown ei toimine
- losetup -f # palauttaa (esim.) /dev/loop1
- losetup /dev/loop1 ~mailkang/mailkang1.img
Disaster recovery: /usr lost
- kpartx -a /dev/loop1
- mkdir -p /mnt/tmp
- mount /dev/mapper/loop1p1 /mnt/tmp
- mv /mnt/tmp/oldusr /mnt/tmp/usr
Disaster recovery: /usr lost
- umount /mnt/tmp
- kpartx -d /dev/loop1
- losetup -d /dev/loop1
- virsh start mailkang1
/usr lost, ratkaisu 2
- Ei roottia alustakoneessa, käytetään toista virtuaalikonetta apuna:
- virsh destroy mailkang1
- virsh attach-disk mailkang2 ~/mailkang1.img vdb
- --driver qemu --subdriver qcow2 # jos qcow2
/usr lost, ratkaisu 2
- mailkang2:ssa (tarvittaessa ensin reboot, jolloin myös --persistent yllä):
- mkdir -p /mnt/tmp
- fsck /dev/vbd1
- mount /dev/vdb1 /mnt/tmp
- mv /mnt/tmp/oldusr /mnt/tmp/usr
- umount /mnt/tmp
/usr lost, ratkaisu 2
- Lopuksi taas alustakoneessa:
- virsh detach-disk mailkang2 vdb
- virsh start mailkang1
/usr lost, ratkaisu 3
- Käynnistetään virtuaalikone recovery-tilaan:
- virsh destroy mailkang1
- virt-viewer --wait mailkang1 &
- virsh start mailkang1
- nopeasti grub-menu kiinni, recovery mode
/usr lost, ratkaisu 3
- recovery-boot valikosta ”root shell prompt”
- mv /oldusr /usr; exit
- resume normal boot
- Edellyttää graafista konsolia ja nopeaa yhteyttä ja nopeita refleksejä, ellei grubia ole säädetty hitaammalle
/usr lost, ratkaisu 3b
- Recovery-tila sarjaporttikonsolilla, grub on määritetty käyttämään sarjaporttia (/etc/default/grub):
- eri ikkunoissa nopeasti peräkkäin:
- virsh start mailkang1 virsh console mailkang1
- konsoli-ikkunassa recovery boot kuten edellä &c
/usr lost, ratkaisu 4
- Bootataan virtuaalikone CD-imagelta (tai oikealta CD:ltä) root-oikeuksin alustakoneessa:
- virsh destroy mailkang1
- sudo kvm -name mailkang1 -m 256 -hda ~mailkang/mailkang1.img -cdrom /srv/ftp/iso/ubuntu...iso -boot d
- valitaan ”rescue broken system”…
/usr lost, ratkaisu 4
- CD-imagen pitää tässä olla sopiva - erityisesti jos VM:ssä ei ole graafista konsolia, normaalit asennus-CD:t eivät toimi.
- Huom. kvm-komennon optiot erilaisia kuin virt-install jne (ks. man qemu-system)
/usr lost, ratkaisu 5
- Bootataan CD-imagelta ilman root-oikeuksia alustakoneessa:
- virsh destroy mailkang1
- virsh dumpxml mailkang1 >mailkang1.xml
/usr lost, ratkaisu 5
- virsh edit mailkang1
- lisätään cd-rom (image):
- <disk type='file' device='cdrom'>
- <driver name='qemu' type='raw'>
- <target dev='hda' bus='ide'>
- <readonly>
- </disk>
/usr lost, ratkaisu 5
- vaihdetaan boottilaitteeksi cd:
- <os>
- ...
- <boot dev='cdrom'/>
- </os>
/usr lost, ratkaisu 5
- virsh start mailkang1 # rescue broken system...
- virsh shutdown mailkang1
- virsh undefine mailkang1
- virsh define mailkang1.xml
dd - copy & convert
- kopioi dataa ”raakana” tiedostorajoista välittämättä
- poikkeuksellinen syntaksi:
- dd keyword=value [keyword=value...]
- yleisimmät optiot:
- if=syöttötiedosto
- of=tulostiedosto
dd - copy & convert
- bs=lohkokoko (tavuja); myös ibs=... ja obs=...
- count=lohkomäärä (syötteestä)
- skip=ohitettava lohkomäärä syötteestä
- seek=ohitettava lohkomäärä tulostiedostossa
- oflags=... (joukko kopiointiin vaikuttavia asetuksia)
- conv=... (joukko harvoin tarvittavia konversio-optioita, big-endian vs. little-endian jne)
Esimerkki: monen partition muutos
- Levyllä kolme partitiota, root, swap ja /home. Suurennettava root-partitiota, levyä jo suurennettu ts. levyn lopussa on riittävästi tyhjää.
- poistetaan swap ja /home käytöstä (swapoff, umount)
- muutetaan partitiotaulua (fdisk tai parted)
- siirretään /home'n sisältö uuteen paikkaan dd:llä (useana palana jos osittain päällekkäin vanhan kanssa!), bootataan
Esimerkki: monen partition muutos
- suurennetaan root-tiedostojärjestelmä (fsck, resize2fs)
- alustetaan swap-osio uusiksi (mkswap)
- päivitetään boot loader (update-grub)
- päivitetään initramfs (update-initramfs -u)
- Hidasta, vaikeaa ja virhealtista
cron: /etc/crontab
- #m h dom mon dow user command
- joka päivä kello 03:17:
- 17 3 * * * root /root/komento
- joka sunnuntai kello 7:15 ja 17:15:
- 15 7,17 * * 0 root /root/komento
cron: /etc/crontab
- joka kolmas tasatunti:
- 0 */3 * * * root /root/komento
- 15 yli parillisten tuntien 8-16 arkisin:
- 15 8-16/2 * * 1-5 root /root/komento
- joka sunnuntai ja aina kuukauden 15. päivä kello 10:00:
- 0 10 15 * 7 root /root/komento
/etc/cron.*, crontab
- /etc/cron.d: syntaksi kuten /etc/crontab
- käyttäjän crontab: muuten sama mutta käyttäjäkenttä puuttuu, sijainti vapaa, konventionaalinen $HOME/.crontab
- asetetaan komennolla crontab file
/etc/cron.*, crontab
- voidaan rajoittaa keille crontab sallittu:
- /etc/cron.{allow,deny}
- /etc/cron.{hourly,daily,weekly,monthly}
- suoritettavat komennot (skriptit) sellaisinaan
at, batch
- echo komento | at aika
- at -f file aika
- aika voidaan antaa monella tavalla, esim. ”08:15”, ”midnight”, ”noon tomorrow”, ”now + 3 weeks”...
- atq, atrm
- /etc/at.{allow,deny}
- echo komento | batch