Kezdőlap › Fórumok › Van egy ötletem… › Hardy szerver “időzített” leállítása [Megoldva]
- This topic has 38 hozzászólás, 4 résztvevő, and was last updated 14 years telt el by uzsolt.
- SzerzőBejegyzés
- 2010-04-12-14:23 #2199506uzsolt wrote:Ez mond valamit? 🙂
2>/dev/null
Mit gondolsz? 🙂
vizsla wrote:De ezzel megint vigyázz, mert mi van akkor, ha kiírja pl. xy() függvényben hiba van? Mondjuk lehet, hogy egy stdout stderr külön irányítása megoldaná.uzsolt wrote:Már feltételezve, hogy az smbstatus nem akarja felrúgni a konvenciókat 🙂
No, és pont ezért írtam feltételesben.2010-04-13-12:47 #2199507Kaphatnék egy konkrét skript-et próba gyanánt? 🙂
A helyes megfejtőnek fel tudnék ajánlani (a cég által) egy kis kedvezményt reklám anyagokra 😉szerk.: első körben elég lenne a sorok vizsgálata is (kimenet 4 sornál kevesebb -> nincs kapcsolat)
2010-04-13-13:36 #2199508Ennyi az egész sorszámlálás :):
X=$(smbstatus 2>/dev/null | wc -l)
if [ $X -lt 4 ]; then
echo "nincs senki"
else
echo "na most van felhasználó"
fiif [ $X -gt 4 ]; then
Ha a 4 sornál többre vagy kíváncsi. Az else és következő sort kihagyod, ha a másik feltétel nem kell.
Ebben már a hibairányítás a kukába is megvan.Egyéb feltételek:
gt – nagyobb mint
lt – kisebb mint
le – kisebb vagy egyenlő
ge – nagyobb vagy egyenlő
eq – egyenlő
ne – nem egyenlő2010-04-13-13:57 #2199509Közben egyébként rájöttem, hogy az egész sterr kukábairányítása hülyeség, mert azt úgysem fogja beleszámolni, így a “smbstatus | wc -l” jobb, mivel nemcsak megszámolja a sorokat, de a hibaüzenet megmarad a stderr-en és ki lesz írva, így tudni lehet, hogy hiba van és nem a felhasználókkal van a gond. (Persze, feltéve, hogy szabályosan vannak kezelve a hibaüzenetek. Én megmondom őszintén, hogy nekem gyakran kimegy ez a lehetőség a fejemből, amikor hibát íratok ki.)
2010-04-13-14:46 #2199510Összeollóztam de nem sikerül (nem értek a bash-hez)
#!/bin/bash
while true; do
if X=$(smbstatus 2>/dev/null | wc -l)
if [ $X -lt 4 ]; then
COUNTER=0
else # nincs senki
COUNTER=$((COUNTER+1))
fi
if [ $COUNTER -gt 30 ]; then
suspend
fi
sleep 1m
done
szerver@ubuntu:~/Desktop$ ./Sleep2.sh
./Sleep2.sh: line 13: syntax error near unexpected token `done'
./Sleep2.sh: line 13: `done'
2010-04-13-15:03 #2199511Az elejére nem kell if
body007 wrote:Összeollóztam de nem sikerül (nem értek a bash-hez)#!/bin/bash
while true; do
if X=$(smbstatus 2>/dev/null | wc -l) <<<< Itt nem kell az if!
if [ $X -lt 4 ]; then
COUNTER=0
else # nincs senki
COUNTER=$((COUNTER+1))
fi
if [ $COUNTER -gt 30 ]; then
suspend
fi
sleep 1m
done
2010-04-13-22:58 #2199512Tényleg nyugodtan elhagyhatod a 2>/dev/null-t, mert az stderr olyan neki, mintha ott sem lenne… nem kezeli.
Egyébként a legjobb megoldás a samba logok figyelése lenne egyszer félóránként. (Tehát nem kell 30x, vagy akár többször vizsgálni.) Ugyanis abban a samba kapcsolatok időkóddal lementésre kerülhetnek és mind ott is marad és nem pillanatnyi állapot. Magyarán nincs olyan, hogy az adott pillanatban épp elkerülöd a felhasználókat és zárod a bazárt, pedig volt kapcsolat csak éppen akkor nem vizsgáltad. Továbbá nem lehet gond a vizsgálat módjával (sorok számolása és egyéb trükkök), ugyanis a logokban egyértelműen meg van jelölve a kapcsolat létrehozása sor és időkóddal ellátva. Tehát pontosan tudod, hogy milyen szót keresel és az a sor milyen dátummal készült. (Sőt fél óránként lehet törölni, vagy backupolni a logot így nem kell figyelni az ismétlődések felesleges vizsgálatára.)
Én most, hogy hideg fejjel, elvonatkoztatva a “feladat kiírástól”, tuti, hogy így csinálnám.2010-04-14-08:37 #2199513Átírtam, így már elindul, köszi. “Márcsak” ez a gond:
szerver@ubuntu:~/Desktop$ sudo ./Sleep2.sh
[sudo] password for szerver:
./Sleep2.sh: line 10: suspend: cannot suspend: no job control
./Sleep2.sh: line 10: suspend: cannot suspend: no job control
...
Másik az, h miért akarja leállítani mikor fullon van kapcsolattal?
2010-04-14-09:29 #2199514A suspend-nek nézz utána, milyen paraméterekkel kell meghívni. A másik:
if [ $X -lt 4 ]; then
Ebben a sorban nem -lt kell, hanem –gt, mivel az X értéke ha nagyobb, mint 4, akkor van kapcsolat…2010-04-14-11:41 #2199515Ez lett akkor a “végleges”:
#!/bin/bash
while true; do
X=$(smbstatus 2>/dev/null | wc -l)
if [ $X -gt 4 ]; then
COUNTER=0
else # nincs senki
COUNTER=$((COUNTER+1))
fi
if [ $COUNTER -gt 30 ]; then
hibernate
fi
sleep 1m
doneReggel majd meglássuk milyen a puding 🙂
- SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz