Sziasztok!
Módosítom az előző kérdést, hogy jobban érthető legyen:
Kialakítottam egy működő linux-ldap-samba rendszert kvótával.
A rendszer küld levelet ha tárhely kezd betelni.
Tökéletesíteni szeretném, úgy, hogy ne csak email útján értesülhessenek a kvóta állapotáról hanem win és linux felhasználók belépéskor kapjanak egy felbukkanó üzenetet.
Úgy tervezem, hogy:
- vagy lefuttatja a sudo repquota /dev/sda1 -et és onnan valami sztringkezelõ bûvészkedéssel kiszámolom,hogy adott userre mi a helyzet
- vagy sudo quota -s username és abból számolja ki a sztringkezelõ
- ezután az csinálna egy fájlt amit az xmessage 'fájlname' feldobna a usernek
win esetén meg egy vbscript dobná fel
Mit gondoltok?
Esetleg van egyszerûbb módja is adott user kvóta érték közvetlen feldolgozható lekérdezésének, amit átadhatok pl.: százalékos érték alapján xmessage ablakot feldobó programnak?
Vagy az egészet már valaki kitalálta csak én nem találtam még meg?
Köszi
- 2222 megtekintés
Hozzászólások
valaki esetleg?
- A hozzászóláshoz be kell jelentkezni
ilyen app-ról nem tudok.
esetleg (ha már megírod...=]) desktop notification xmessage helyett?
biztos van jobb lib. is, de ez pl. valamennyire cross-platform (gtk), mintának jó lehet:
https://github.com/woodenbrick/gtkPopupNotify
- A hozzászóláshoz be kell jelentkezni
köszi, megnézem,
Esetleg más ötlet?
- A hozzászóláshoz be kell jelentkezni
notify-send (libnotify-bin) ??
Nem vagyok biztos benne hogy megfelel.
- A hozzászóláshoz be kell jelentkezni
Egynelőre az a kérdésem, hogy ki lehet e szedni egyszerűbb módon a quota értékeket, szemben a quota parancs kimenetének stringként valaó feldolgozásával tehetném?
- A hozzászóláshoz be kell jelentkezni
irj sajat progit, kb 50 sor sincs. par toredek sor:
struct dqblk quota;
if (!quotactl(QCMD(Q_GETQUOTA, USRQUOTA), path, uid, (char *)"a)) {
// sikerult
printf("ahogy akarod...\n");
}
use google!
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Sziasztok!
Elkezdtem a programomat ami a quota -s kimenetét dolgozná fel.
Ott akadtam el, hogy eléggé nehezen megy nekem a programozás.
Addig megy, hogy megtalálja az olyan szavakat amik tartalmaznak "M"-et.
Amit nem sikerült, hogy az ellenőrzés előtt szeretném az első 2 sort törölni, hogy csak a /dev-vel kezdődőt figyelje.
Úgy gondoltam, hogy nem hozok létre egy fájlt hanem elintézem az egészet memóriában.
Ezután még szeretném a talált M értékeket változókba tenni, ezt sem tudom pontosan hogy kell.
Szerintem ezután a számolást már meg tudnám csinálni, talán.....
Köszi
A quota -s kimenete:
Disk quotas for user csaba (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/md2 512M 590M 700M 974 0 0
A programom:
#!/usr/bin/perl
#Ez a program a felhasznalok disk kvotait kerdezi le es dolgozza fel
use strict;
use warnings;
my $all_text;
my $string_to_find;
my $usage;
my $kvota;
my $max;
my @elemek;
$all_text=`quota -s`;
@elemek=split(/[ ]+/,$all_text);
foreach(@elemek)
{
if (/M/)
{
print "A(z) $_ szó tartalmazza az 'M' részletet\n";
}
}
print $all_text;
Ha futtatom a programot akkor jelenleg ezt adja:
A(z) 512M szó tartalmazza az 'M' részletet
A(z) 590M szó tartalmazza az 'M' részletet
A(z) 700M szó tartalmazza az 'M' részletet
Disk quotas for user csaba (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/md2 512M 590M 700M 974 0 0
- A hozzászóláshoz be kell jelentkezni
Eleve csak azt tedd be a tömbbe, ami kell. Pl:
open(SOURCE,"qouta -s |");
while ($var=<SOURCE>) {
if($var =~ m/^\/dev/) {
# valami
}
}
Egyébként ez így nem tudom mennyire lehet működőképes, mivel nekem pl. az eszköz neve nem fér el a kiszabott helyre, ezért a hozzá tartozó kvóták új sorba vannak. Így meg ugye már nem fog működni a script.
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/VG1-Home
65847M 87891M 92774M 155k 0 0
- A hozzászóláshoz be kell jelentkezni
nekem kiírja a saját lemezhasználatomat ha user futtatja:
ez nem jó?
$ quota
Disk quotas for user sysop (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/hda3 3099708 3100708 0 47473 0 0
$ quota -V
Quota utilities version 3.16.
Compiled with: USE_LDAP_MAIL_LOOKUP EXT2_DIRECT HOST_ACCESS ALT_FORMAT RPC RPC_SETQUOTA BSD_BEHAVIOUR
Bugs to jack@suse.cz
~~~~~~~~
De ezt az egy lépést ki nem tevé,
Az nem tett semmit, nem tud semmit is.
- A hozzászóláshoz be kell jelentkezni
Igen, tudom....
De én ezt fel szeretném dolgozni és ehhez be kellene gyűjtenem a quota -s kimenetét 3 db külön változóba.
block
quota
limit
CSak elég kezdp vagyok a programozáshoz
- A hozzászóláshoz be kell jelentkezni
quota | awk '{ print $2,$3,$4 }'| tail -1
De ha perlben dolgozol, és nem csak az "utolsó sor" kell, érdemes egy kicsit utána olvasni a regex kifejezéseknek/ mintaillesztésnek. Linket nem adok, mert biztos találsz jobb anyagokat, mint én most fél perc alatt.
- A hozzászóláshoz be kell jelentkezni
KÖszi, ez frappáns megoldás, utánanézek jobban.
- A hozzászóláshoz be kell jelentkezni
Az awk parancsot próbálom belekombinálni, hogy kinyerjem a változókat. Mit csinálok rosszul?
#!/usr/bin/perl
#Ez a program a felhasznalok disk kvotait kerdezi le es dolgozza fel
use strict;
use warnings;
my $usage;
my $kvota;
my $max;
($usage,$kvota,$max)=`quota | awk '{ print $2,$3,$4 }'| tail -1`;
így se jó
($usage)=`quota | awk '{ print $2 }'| tail -1`;
($kvota)=`quota | awk '{ print $3 }'| tail -1`
($max)=`quota | awk '{ print $4 }'| tail -1`
print $usage;
print $kvota;
print $max;
- A hozzászóláshoz be kell jelentkezni
Nem sok értelme van a perl és az awk keverésének. Mit értesz feldolgozás alatt?
quota | awk '{printf "blocks: %d\nquota: %d\nlimit: %d\n", sqrt($2), log($3), $4**2}' | tail -1 | xmessage -file -
-----
"Guglizni csak pontosan, szépen, ahogy a csillag megy az égen, úgy érdemes.""
- A hozzászóláshoz be kell jelentkezni
Feldolgozáson azt értem, hogy:
- amikor a tanulók (suli) belépnek elindul a kvota.pl ami ellenőrzi, hogy áll a saját kvótája + elindul egy időzítő
--ha kvóta ≥90% ⇒ xmessage (figyelmeztet, h kezd betelni)
--ha kvóta < 90% ⇒ ok nem jön felbukkanó
--ha kvóta =100% ⇒ xmessage (figyelmeztet, h betelt )
- az elindított időzítő újra lefuttatja ezt az egészet
Ez a tervem. Elég kezdő vagyok, lehet h másnak jobb ötlete is volna .
Jelenleg itt tartok:
#!/usr/bin/perl
#Ez a program a felhasznalok disk kvotait kerdezi le es dolgozza fel
use strict;
use warnings;
my @all_text;
my $usage;
my $kvota;
my $max;
my $valtozok;
my $line;
my @bits;
my $maradt;
$line=`quota`;
@bits = split(/\s+/, $line);
print "$bits[17] $bits[18] $bits[19]\n";
$maradt=$bits[18]-$bits[17];
print "$maradt\n";
- A hozzászóláshoz be kell jelentkezni
Akkor jobb a perl. Vagy egy kicsit gányolni kell az awk-ban.
Alapként azt tenném, hogy a scriptet belépéskor, illetve cronból, például 30 percenként futtatnám, így az időzítés kérdése megoldódna. Ha van bőven szabad hely, akkor nem történik semmi. Ha kevés a hely akkor a cronból futtatott script megjelenítené az üzenetet.
Nem szép, de talán működik:
quota | tail -1 | awk '($3>=0.9*$4){ system("gxmessage ""Kezd betelni a tárhely. Maradt még """$4-$3""" MByte szabad hely.""") }'
Ez 100%-nál nem tökéletes, de így egyszerűbb. Vagy bonyolultabban:
quota | tail -1 | awk '($3>=0.9*$4)&&($3<$4){ system("gxmessage ""Kezd betelni a tárhely. Maradt még """$4-$3""" MByte szabad hely.""") } ($3==$4){system("gxmessage ""Nincs szabad hely!""")}'
Az xmessage nem szereti az utf8-at, ezért célszerűbb a gxmessage használata.
-----
"Guglizni csak pontosan, szépen, ahogy a csillag megy az égen, úgy érdemes.""
- A hozzászóláshoz be kell jelentkezni
Itt az én verzióm, persze nem olyan profi, mint ironcaté :)
Még az időzítő hiányzik belőle és az, hogy saját magát meghívja adott idő eltelte után.
#!/usr/bin/perl
#Ez a program a felhasznalok disk kvotait kerdezi le es dolgozza fel
use strict;
use warnings;
use POSIX;
my @all_text;
my $usage;
my $kvota;
my $max;
my $valtozok;
my $line;
my @bits;
my $maradt;
my $szazalek;
my $treshold;
$treshold=90;
$line=`quota`;
@bits = split(/\s+/, $line);
#print "$bits[17] $bits[18] $bits[19]\n";
$usage=$bits[17];
$kvota=$bits[18];
$maradt=floor(($kvota-$usage)/1024);
$usage=floor($usage/1024);
$kvota=floor($kvota/1024);
$szazalek=floor(($usage/$kvota)*100);
print "----------- Treshold:$treshold % ------------\n";
print "Hasznal: $usage Mbyte\n";
print "Kvota: $kvota Mbyte\n";
print "Maradt: $maradt Mbyte\n";
print "szazalek: $szazalek %\n";
print "tarhely ok\n" if ($szazalek<$treshold);
print "tarhely nem ok\n" if ($szazalek>=$treshold);
print "tarhely betelt\n" if ($szazalek==99);
if ($szazalek>=$treshold)
{
`xmessage tarhely kezd betelni`;
}
if ($szazalek==99)
{
`xmessage tarhely betelt`;
}
- A hozzászóláshoz be kell jelentkezni
Az én verziómban lévő system() hívást azért nem nevezném profinak. :-(
-----
"Guglizni csak pontosan, szépen, ahogy a csillag megy az égen, úgy érdemes.""
- A hozzászóláshoz be kell jelentkezni
Azért, elég ügyes.
Azt hogy lehetne megoldani, hogy:
lenne egy parancs, ami meghívje ugyan ezt a programot adott idő eltelte után függetlenül attól, hogy mikor lépett ki a program?
Vagyis, user belép...program indul..... ha baj van kap egy értesítést... ok-ra kattint és program kilép
De a kilépés előtt az újrahívás elintéződne.
- A hozzászóláshoz be kell jelentkezni
Arra gondoltam, hogy a kvota.pl meghívná a kvota-restart.pl programot.
A kvota-restart meg a kvotat a megadott idő eltelte után.
De azt nem tudom, pontosan mi a módja egy másik perl progi elindításának és még azt nem tudom, hogy ha user kilép akkor ez a loop-ot megáll e attól, hogy a user kilépett?
kvota-restart.pl
#!/usr/bin/perl
#Ez a program a kvota.pl programot inditja ujra a megadott ido eltelte utan
use strict;
use warnings;
use POSIX;
sleep(500);
itt lenne a kvota.pl meghívása
- A hozzászóláshoz be kell jelentkezni
A perl-t szeretem, mert nagyon rugalmas ilyen szempontból
system("perl ./kvota.pl");
vagy rekviráld! :D
require "./kvota.pl";
Ha kiforkoltatsz egy processzt egy másikból, az fog futni attól függetlenül is hogy a login processzed kimúlik. Próbáld ki:
$ ( sleep 5; play hang.wav ) &
$ logout
~~~~~~~~
De ezt az egy lépést ki nem tevé,
Az nem tett semmit, nem tud semmit is.
- A hozzászóláshoz be kell jelentkezni
Igen, értem.
Nekem az kellene, hogy megálljon ha a user kilépett. Azt hogy lehetne elintézni elegánsan?
Nálunk majdnem 1000 diák van, persze nem tudnak mind egyszerre géphez ülni :) de egy idő után elég sok futó process maradna.
- A hozzászóláshoz be kell jelentkezni
Ha kevés hely van, akkor az at paranccsal beállítható a következő futás időpontja.
Kilépés előtt atq-val lekérdezhető hogy van-e időzített parancs, és ha van akkor atrm-mel törölhető.
-----
"Guglizni csak pontosan, szépen, ahogy a csillag megy az égen, úgy érdemes.""
- A hozzászóláshoz be kell jelentkezni
Ez jó ötlet, csak hogy mondom meg az atq-nak, hogy mikor van épp kilépés? Bocs, de tényleg nem vagyok benne még.
- A hozzászóláshoz be kell jelentkezni
Csak egy tipp: Én az /etc/X11/Xreset.d/-be tennék be egy fájlt, a megfelelő paranccsal. Arra viszont vigyázni kell, hogy ez root-ként fut le, így szűrni kell a felhasználói névre.
Ha konzolon is bejelentkezhet a felhasználó, akkor a ~/.bash_logout-ot is szerkeszteni kell..
-----
"Guglizni csak pontosan, szépen, ahogy a csillag megy az égen, úgy érdemes.""
- A hozzászóláshoz be kell jelentkezni
Amikor ilyen webtárhelyes mókáim voltak, akkor én repquota -a kimenetét toltam be egy mysql táblába és mindenki meg tudta nézni a service felületén a quota értékeit filesystemenként és ilyesmi. Mondjuk nem érdekelte a kutyát sem, ettől még lazán telefonálgattak, ha több volt a számlán, így elhalt ez a dolog. Ha úgysem nézik, akkor minek? Egy időben automata mail-t küldtem róla....akkor is telefonálgattak. Mindkét esetben a számlán is szerepelt, hogy n (k/M)byte túllépésük van...de masszívan a telefonon lógtak. Az ügyfél fura állat.
- A hozzászóláshoz be kell jelentkezni
Köszi.
Csak félig, de idetartozó kérdés:
nfs serverhez kapcsolódik egy nfs auto home móddal egy másik linux, amikor az nfs kliensre jelentkezik be az illető, ott hogy lehetne a kvótázást beindítani?
A kliensre fel kell telepíteni a quota daemont?
Én csak annyit szeretnék, hogy az auto home-mal castolt usereket kvótázza.
Köszi
megoldódott, csak a quota programok kellett felrakni,
- A hozzászóláshoz be kell jelentkezni