Hlavní navigace

Hrátky z řádky: Na neznámém stroji a hrátky s časem

Petr Macek

Opět se setkáváme u pravidelné pondělní dávky tipů a triků z černé řádky. Dnes se podíváme na několik příkazů, které nám pomohou při prvním přihlášení na nám dosud neznámý vzdálený počítač. Dále se podíváme na pravidelné spouštění úloh pomocí démona cron a na závěr si pohrajeme s přesným časem.

Kdo a kde jsem, co je to za stroj?

Občas dostanu od někoho ssh údaje pro přihlášení s tím, že mám na daném stroji něco udělat. Napřed je dobré mít nějaké informace. Kdo jsem a do kterých skupin patřím, mi řekne příkaz id.

$ id
uid=1001(pm) gid=1001(pm) groups=1001(pm), 0(wheel), 5(operator)
$ su
Password:
#  id
uid=0(root) gid=0(wheel) groups=0(wheel), 5(operator)

Můžeme zjišťovat informace i o jiných uživatelích:

$ id tm
uid=1003(tm) gid=1003(tm) groups=1003(tm), 80(www)

Pokud se nám server slušně nepředstaví po přihlášení, zeptáme se ho příkazem uname. Bez parametru nám toho moc neřekne, s parametrem -a už se dozvíme spoustu věcí. U FreeBSD třeba verzi, patch level, jaké jádro používáme, …

pm@mail ~ $ uname -a
FreeBSD mail.firma.cz 6.2-RELEASE-p4 FreeBSD 6.2-RELEASE-p4 #0: Mon May 21 11:33:00 CEST 2007
root@mail.firma.cz:/usr/obj/usr/src/sys/KERNEL_MAIL_FIRMA_CZ  i386

Pokud se ani takhle nedozvíte potřebné informace (znám servery, které na uname říkají jen: linux), zkuste:

$ cat /etc/*version

nebo

$cat /etc/*release

Ke zjištění DNS jména serveru příkaz hostname. Příkazy who a w se také mohou hodit – zobrazí informace o přihlášených uživatelích a co právě dělají.

Když se chcete dozvědět něco o hardware, použijte příkaz dmesg, v některých distribucích dmesg -a. Ve FreeBSD dosáhnete stejného výsledku pomocí

$ cat /var/run/dmesg.boot

Příkaz vám vypíše buffer, uvidíte v něm např. zprávy o bootu systému, jaký HW byl nalezen a co se spouštělo.

Další příkazy, které se mohou hodit (některé už jsme si ukázali, některé ještě probereme):  users, whoami, uptime, last.

Cron – pravidelné spouštění úloh

Nedávno jsme si ukázali program at určený pro jednorázové spouštění úlohy ve stanovený čas. Dnes se podíváme na pravidelné spouštění pomocí démonu cron. V běžném systému si každý uživatel může spravovat svou cron tabulku. Úlohy se tedy spouští s právy uživatele vlastnícího příslušnou cron tabulku. Ke správě tabulky slouží příkaz crontab. Nejprve si ukážeme, jak takový crontab může vypadat, to se provádí pomocí příkazu  crontab -l:

00 23 * * *         /usr/sbin/ntpdate tak.cesnet.cz >> /dev/null
40 22 * * 5         /usr/local/bin/zalohuj >> zalohovani_chyby
30 10 14,28 * *     /usr/local/bin/lynx -dump http://www.mujserver.cz/cron/zaloha_sql.php

Pravá strana výpisu je asi jasná, udává, který příkaz nebo příkazy (oddělené středníkem) se budou spouštět. Levá strana už tak jasná není. Je to v podstatě pět sloupečků, jsou odděleny mezerou nebo tabulátorem. Každý zastává nějaký časový údaj:

1. minuty (může být 0-59)
2. hodiny (může být 0-23)
3. den v měsíci (může být 1-31)
4. měsíc (může být 1-12)
5. den v týdnu (může být 0-7, 0 i 7 je neděle)

Hvězdička pak znamená libovolný. Pokud bychom zadali 5× hvězdičku, úloha by se spouštěla každou minutu. Objasníme si to na výše uvedené tabulce. První záznam říká, že ntpdate se spustí každý den ve 23:00. Druhý řádek je podobný, zálohování se spustí ve 22:40, ale jen v pátek. Třetí záznam se spustí v 10:30 každý 14. a 28. den v měsíci.

U zadávání máme ještě další možnosti:
*/5 * * * * Toto nám spustí úlohu každých 5 minut
10 0 * * 1–5 spustí se v pondělí až pátek v 00:10
5 0–23/2 * * * spustí se každou sudou hodinu:5 (02:05, 04:05, …)
55 0 13 * 5 načasovat se dá vše, tohle je pátek třináctého

Ještě si můžeme ovlivnit chování, např. pomocí parametrů SHELL, MAILTO a PATH si můžeme nastavit jiný shell, cesty a komu se má mailovat výsledek spuštění:

SHELL=/bin/sh
MAILTO=uzivatel
PATH=/usr/bin:/bin

Uživatel root může prohlížet a měnit tabulky všech uživatelů, slouží k tomu parametr

-u uzivatel

Čas

Na serveru, kde nepotřebuji úplně přesný čas, používám v crontabu uživatele root toto:

50 23 * * *         /usr/sbin/ntpdate tak.cesnet.cz >> ntpdate.log

Každou noc se mi seřídí čas dle serveru tak.cesnet.cz a v logu je krásně vidět, jak se synchronizovalo:

$ cat /root/ntpdate.log
19 Jan 23:50:00 ntpdate[99830]: adjust time server 195.113.144.201 offset -0.030088 sec
20 Jan 23:50:00 ntpdate[3488]: step time server 195.113.144.201 offset -1.068216 sec
21 Jan 23:50:00 ntpdate[7068]: step time server 195.113.144.201 offset -1.093893 sec

Samozřejmě pokud chcete mít přesnější čas, je potřeba zkonfigurovat ntpd démon. Ve FreeBSD stačí přidat do /etc/rc.conf:

ntpd_enable="YES"

Vytvořit konfigurační soubor /etc/ntp.conf:

logfile /var/log/ntpd
driftfile /var/db/ntpd.drift
statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

server ntp.mujposkytovatel.cz
server ntp.verejnyserver.cz
server tik.casovy.cz

a spustit:

$ /etc/rc.d/ntpd start

Seznam ntp serverů najdete na ntp.org a konkrětně pro ČR v sekci cz. Potom může tento ntpd sloužit jako server pro další stroje ve vaší síti.

Našli jste v článku chybu?