Úvod do Operačních Systémů

Transkript

Úvod do Operačních Systémů
Úvod do Operačních Systémů
10. cvičení
Uživatelský vstup, zpracování přepínačů,
psaní a ladění skriptů, plánování úloh.
Úvod do Operačních Systémů – cvičení 10
1
Obsah
Skript pro
logování informací o systému,
uložení konfigurace,
transformaci logu.
●
Psaní a ladění skriptů
#!
set
●
Zpracování přepínačů
getopts
●
Uživatelský vstup
read
●
Plánování úloh
crontab
Úvod do Operačních Systémů – cvičení 10
2
Cíl
Úvod do Operačních Systémů – cvičení 10
3
Výběr informací
Skript bude logovat informace o zatížení systému (load)
(průměr za 1, 5 a 15 min) a počtu příhlášených uživatelů
(celkem a unikátních).
●
Formát log souboru
[27/11/2006-07:30:00] Load: 0.75 0.36 0.12
[27/11/2006-07:30:00] Users: 38 29
●
Informace o zatížení systému
uptime ...
●
Počet přihlášených uživatelů a počet unikátních uživatelů
who ...
Úvod do Operačních Systémů – cvičení 10
4
Skript, debug info
●
Interpret skriptu (první řádek skriptu)
#!/bin/bash
●
Výpis prováděných řádků skriptu
#!/bin/bash -v
set -v
●
Výpis prováděných řádků skriptu po expanzi
#!/bin/bash -x
set -x
●
Nastavení přístupových práv a spuštění skriptu
chmod +rx logger
./logger
Úvod do Operačních Systémů – cvičení 10
5
Transformační funkce
●
Volání logovacích skriptů, transformace výstupu pomocí
funkce log, kde vstupem je jméno informace a samotná
informace.
filename=.mylog
function log() {
...
}
# Logovani urcenych informaci
log Load hodnoty...
log Users hodnoty...
Úvod do Operačních Systémů – cvičení 10
6
Použití zámků I +
●
Skript při startu zkontroluje, zda neexistuje zvolený soubor
(zámek). Pokud ne, vytvoří jej a vloží do něj PID skriptu.
LOCK_FILE=$HOME/.mylog.lock
if locked
then
exit 2
else
echo $$ > "$LOCK_FILE"
trap "rm $LOCK_FILE; exit" 2 3 15
fi
...
rm "$LOCK_FILE"
Úvod do Operačních Systémů – cvičení 10
7
Použití zámků II +
●
Pokud soubor existuje, ale obsahuje PID procesu, který
nepatří tomuto skriptu, soubor se ignoruje.
function locked() {
if [ -f "$LOCK_FILE" ] \
&& ps -u $USER -o pid,args \
| grep "^ *`cat $LOCK_FILE` .* logger" \
>/dev/null
then
echo "Lock file found! (PID=`cat $LOCK_FILE`)"
return 0
else
return 1
fi
}
Úvod do Operačních Systémů – cvičení 10
8
Volby z příkazové řádky I
VERBOSE=0
CONFIG=$HOME/.mylog.conf
LOCK_FILE=$HOME/.mylog.lock
USAGE="Usage: $0 [-h] [-vd] [-c config_file]"
HELP="
-h
this help
-v
verbose mode (use multiply for more verbosity)
-d
daemon mode (check lock file)
-c conf use alternative configuration file
"
Úvod do Operačních Systémů – cvičení 10
9
Volby z příkazové řádky II +
while getopts hvc: opt
do
case $opt in
h) #display help
echo "$USAGE"; echo "$HELP"; exit 0;;
c) #config
if [ -f
then
else
fi;;
file
"$OPTARG" -a -w "$OPTARG" ]
CONFIG=$OPTARG
echo "$OPTARG: wrong config file" >&2; exit 2
v) #verbose mode
((VERBOSE++))
((VERBOSE>0)) && set -v
((VERBOSE>1)) && set -x
;;
\?) #err - unknown option
echo "$USAGE" >&2; exit 2
;;
esac
done ; shift `expr $OPTIND - 1`
Úvod do Operačních Systémů – cvičení 10
10
Konfigurační soubor
●
Konfigurační soubor obsahující nastavení ve formátu
název_proměnné=hodnota
#MyLog config file
#Modified: 27.lis 2006 (07:30:00)
#Modified by barinkl
#filename of log file
#filename=/home/k336/barinkl/.mylog
filename=/home/k336/barinkl/.mylog
#log system load
#load=y
load=y
#log number of users
#users=y
users=y
Úvod do Operačních Systémů – cvičení 10
11
Konfigurační soubor, vytvoření I
●
Skript vytvářející konfigurační soubor podle vstupu
uživatele. Vstup je čten pomocí příkazu read .
#cesta k log souboru a jeho jmeno
until [ -f "$filename" -a -w "$filename" ]
do
echo -n "Log filename [$HOME/.mylog]: "
read filename junk
echo "${filename:=$HOME/.mylog}"
if [ "`echo $filename | cut -c1`" != / ]
then
filename="$PWD/$filename"
fi
[ -f "$filename" ] \
|| { touch "$filename"; chmod u+w "$filename"; }
done
Úvod do Operačních Systémů – cvičení 10
12
Konfigurační soubor, vytvoření II
●
Dotaz na logování zátěže (load) – možnosti y/n
while ! echo "$load" | grep '^[yYnN]$'
do
echo -n "Log load [y]/n? "
read load junk
[[ -z "$load" ]] && load=y
done
●
Dotaz na logování počtu uživatelů (users) – možnosti y/n
while ! echo "$users" | grep '^[yYnN]$'
do
echo -n "Log users [y]/n? "
read users junk
[[ -z "$users" ]] && users=y;
done
Úvod do Operačních Systémů – cvičení 10
13
Konfigurační soubor, vytvoření III
cat <<KONEC >"$CONFIG"
#MyLog config file
#Modified: `date '+%d.%b %Y (%T)'`
#Modified by $USER
#filename of log file
#filename=$HOME/.mylog
filename=$filename
#log system load
#load=y
load=$load
#log number of users
#users=y
users=$users
KONEC
Úvod do Operačních Systémů – cvičení 10
14
Načtení konfigurace I
●
Načtení funkce ze souboru readconf do skriptu
. ./readconf
●
Načtení konfigurace ze souboru. Funkce je v samostatném
souboru readconf.
function readconf() {
err=0
while [ $# -gt 0 ]
do
case "$1" in
filename)
filename=`sed -n '/^filename=/s/[^=]*=//p' $CONFIG \
| tail -1`
if ! [ -f "$filename" -a -w "$filename" ]
then err=1;
fi
;;
Úvod do Operačních Systémů – cvičení 10
15
Načtení konfigurace II
load)
load=`sed -n '/^load=/s/[^=]*=//p' $CONFIG \
| tail -1`
if [[ "$load" != [yYnN] ]]; then err=1; fi
;;
users)
users=`sed -n '/^users=/s/[^=]*=//p' $CONFIG \
| tail -1`
if [[ "$users" != [yYnN] ]]; then err=1; fi
;;
*) return 2;;
esac
shift
done
return $err
}
Úvod do Operačních Systémů – cvičení 10
16
Použití načtení konfigurace
●
Načtení proměnných z konfiguračního souboru
# Nacteni konfigurace
if ! readconf filename load users
then
echo "Error reading config file"
exit 2
fi
Úvod do Operačních Systémů – cvičení 10
17
Plánování úloh +
●
Nastavení a vypsání opakovaného spouštění úloh
export EDITOR=vi
crontab -e
* * * * * $HOME/logger
den v týdnu
měsíc
den
hodina
minuta
●
Možné hodnoty:
*
*/2
5
2,7
1-5
každá hodnota
každá 2. hodnota
hodnota 5
hodnoty 2 a 7
hodnoty 1,2,3,4,5
crontab -l
Úvod do Operačních Systémů – cvičení 10
18
Vykreslení grafu z dat v logu +
●
Transformace dat z logu
awk '/Load:/ {L1=$3; L2=$4; L3=$5}
/Users:/ { print $1,L1,L2,L3,$3,$4}'
~/.mylog > .mylog.data
●
Vykreslení grafu pomocí příkazu gnuplot
gnuplot .mylog.plot
●
Zobrazení grafu v obrázku
display .mylog.png
Úvod do Operačních Systémů – cvičení 10
19
Skript pro gnuplot ++
set
set
set
set
set
set
set
set
set
set
set
terminal png small color
size 1.5
output ".mylog.png"
rmargin 3
lmargin 6
tmargin 1
bmargin 1.5
nogrid
multiplot
xdata time
timefmt "[%d/%m/%Y-%H:%M:%S]"
set format x ""
set size ratio 0.5
plot [][0:] \
'.mylog.data' using 1:2 title '1 min avg' with lines, \
'' using 1:3 smooth bezier title '5 min avg' with lines,
\
'' using 1:4 smooth bezier title '15 min avg' with lines
set format x "%H:%M"
set origin 0,0.99
set size ratio 0.25
plot [][0:] \
'.mylog.data' using 1:5 title 'users' with lines, \
'' using 1:6 title 'uniq users' with lines
Úvod do Operačních Systémů – cvičení 10
20
Příprava na příští cvičení
●
Upravte skripty z tohoto cvičení tak aby
●
●
●
●
●
●
byly uživateli hlášeny chyby při práci se soubory (neexistence,
nedostatečná práva, špatný obsah, ...),
skripty i soubory mohly být uloženy v libovolném adresáři (odstranění
absolutních cest),
skript přijímal argumenty z příkazové řádky, které by uváděly názvy
logovacích funkcí (skriptů). Argumenty by pak měly přednost před
nastavením z konfiguračního souboru.
jméno log souboru mohlo být předáno jako argument přepínače -o
z příkazové řádky,
přibyla informace, která se bude také logovat.
Vytvořte skript a naplánujte jeho pravidelné spouštění,
který by generoval do určeného adresáře grafy z log
souboru za zvolené období.
Úvod do Operačních Systémů – cvičení 10
21

Podobné dokumenty

Grafické zpracování dat a měření

Grafické zpracování dat a měření uloží aktuální stav gnuplotu , tj. uživatelsky nadefinované proměnné, funkce, všechna nastavení provedená pomocí set a poslední příkaz plot, resp. splot. 1 V Linuxu stačí napsat do příkazové řádky ...

Více

Poprvé s gnuplotem

Poprvé s gnuplotem load 'scriptname' call 'scriptname' args pwd, cd 'dir' save opts 'file' quit, exit, CtrlD gnuplot.pdf

Více

ZDE - Tesco

ZDE - Tesco ZDE NALEPTE SVÉ ZNÁMKY: 1. známka pro vás zdarma

Více

Bezdiskové stanice na Ubuntu Linuxu

Bezdiskové stanice na Ubuntu Linuxu skrýt adresáře v /, vytvořte soubor /.hidden a do něj napište všechny adresáře, které se mají skrýt. Syntaxe je jeden soubor/adresář na řádek. Rozumné nastavení vypadá asi takto:

Více

zde

zde příletových cestách. V tomto směru může být protivníkem příroda, která v nedávné době, po záplavách, vyžádala intenzivní záchranné práce. Je na našem strategickém velení, aby si vyhodnotilo do jaké...

Více

Ovládání programu WinEiv2d

Ovládání programu WinEiv2d Do pole Delta's File se zadává cesta k souboru s popisem diskretizovaných kroužků. Stisknutím tlačítka Browse se otevře dialog pro výběr souboru. Hodnotu parametru epsilon lze zadat buďto zadáním c...

Více

Toto

Toto dětmi objektů figure a rodiči objektů line, surface, patch, image a text. Objekty axes definují polohu a rozsah svých dětí uvnitř objektu figure. axes – samostatně – vytváří objekt axes a vrací jeh...

Více

Program Můj PVS

Program Můj PVS Provádí import dat nebo pořízení dat. Umožňuje provádět předepsané kontroly dat podle pravidel ČSSZ. Vytváří exportní XML soubor k odeslání disketou či na CD, tisk přehledové sestavy. Zejména však ...

Více

Zde - Penguin

Zde - Penguin Perl je programovacím jazykem primárně určeným jako pomůcka pro správu systému. Kombinuje v sobě prvky jazyka C, awk, grepu, sedu, a Bourne shellu. Perl je výtečným nástrojem pro zpracování textu. ...

Více