Portál AbcLinuxu, 26. prosince 2025 09:00
start() {
for((;;))
do
echo "$(date +%F) @ $(date +%T) :: $(cpuload | awk {'print$2'})%" >> /home/david/stats/now
done
}
stop() {
mv /home/david/stats/now /home/david/stats/$(date +%F)-at-$(date +%T).log
}
restart() {
mv /home/david/stats/now /home/david/stats/$(date +%F)-at-$(date +%T).log
for((;;))
do
echo "$(date +%F) @ $(date +%T) :: $(cpuload | awk {'print$2'})%" >> /home/david/stats/now
done
}No a díky tomu jsem se dostal k tomu, že neumím ukončit for cyklus. Na začátku stop() a restart() mi to chybí. Nevíte prosím jak na to?
Především by bylo vhodně, dělat restart voláním procedur stop a start, nikoliv copy-paste jejich obsah.
Potom, když je to systémový skript, tak je lepší výsledek ukládat do /var/neco, než do /home
Co takhle nekonečný for nahradit smyčkou while a jako podmínku tam dát test existence nejakého souboru? Pokud soubor přestane existovat (tj. ve stop se smaže), tak se jednoduše ukončí. To by nešlo?
while smyčku nepsal...
man testa ještě:
[ je hardlink na test
Tak mě napadá, že tam nikde není sleep. Nebo je už v tom cpuload?
Jede to každých 5 sekund.
cpuload každých 5 sekund zapíše zatížení procesoru do statistiky. Zdrojový kód cpuload je zde (díky, Doli), /etc/init.d/cpustats vypadá takto:
start() {
cpuloadd &
}
stop() {
if [ -f /home/david/stats/now ]
then
mv /home/david/stats/now /home/david/stats/$(date +%F)-at-$(date +%T).log
killall cpuloadd cpuload
else
killall cpuloadd cpuload
fi
}
restart() {
svc_stop
svc_start
}a cpuloadd obsahuje:
#! /bin/bash
doIt() {
for((;;))
do
echo "$(date +%F) @ $(date +%T) :: $(cpuload | awk {'print$2'})%" >> /home/david/stats/now
done
}
if [ -f /home/david/stats/now ]
then
mv /home/david/stats/now /home/david/stats/$(date +%F)-at-$(date +%T).log
doIt
else
doIt
fi
if [cond] ... doIt else doIt fi
Stejný příkaz v obou větvích ifu?
To si asi nerozumíme. Mě je jedno, co ten příkaz doIt dělá a v jakém je skriptu. Zajímá mě, proč je v obou větvích ifu stejný příkaz (tedy vykoná se, ať podmínka ifu dopadne jakkoliv)
Místo:
if [cond] ... doIt else doIt fi
Lze přece jednoduše psát:
if [cond] ... fi doIt
/var/stats a když ne, aby jí vytvořil. V manuálu testu kontrole zda soubor NEexistuje nic není (když neexistuje aby vrátil exit 0 a když jo, tak 1). Musím tedy napsat if s nějakým zbytečným echem, nebo to test umí a postačí while?
ls /var/stats &> /dev/null while [ $? != 0 ] do mkdir -p /var/stats done
if [ ! -f "$FILE" ]; then echo "$FILE not found" fi
Děkuji.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.