#!/bin/bash ## ## arr dei server formato 'utente@host |nome_simbolico' ## SERVER=('[email protected] |SERVERA' '[email protected] | SERVERB' '[email protected] -p4390 |SERVERC' '[email protected] -p2100 | SERVERD') # start a new konsole window and save the handle in $konsole konsole=$(dcopstart konsole-script) # maximize the new window dcop $konsole konsole-mainwindow#1 maximize # get current session for the first (just created) window thissession=$(dcop $konsole konsole currentSession) # rename this window/session dcop $konsole $thissession renameSession "Scuolazoo init" # start a new session tab for each server for s in "${SERVER[@]}" ; do srv=`echo $s|awk -F\| '{print $1}'` name=`echo $s|awk -F\| '{print $2}'` # this output is displayed on the terminal which is running your script echo "connect to server: $name" # create another konsole tab and save handle in $newsession newsession=`dcop $konsole konsole newSession "ssh $srv"` # wait for shell startup while [ `dcop $konsole $newsession sessionPID` -eq 0 ]; do sleep 0.1 done # rename the new session dcop $konsole $newsession renameSession $name # and start the ssh session dcop $konsole $newsession sendSession "exec ssh $srv \"$param\"" done # close the first session window dcop $konsole $thissession closeSession > /dev/null
Archivio Categoria: Bash
bash find email year based
for i in `find . -type f -iname ‘*[0-9]*’` ; do head -n $(grep -m1 -n ^$ $i | awk -F : ‘{print $1}’) $i | grep “^Date.*\ 2005\ ” -q ; if [ $? != 1 ]; then echo $PWD $i; fi ; done
bash countdown refresh screen terminal counter
enrico@tex:~$ clear && for i in `seq -10 0`; do tput cup 1 0 && printf ” $i ” ; sleep 1; done
script backup server ftp curl
Di seguito un semplicissimo script bash per effettuare il backup di una direcotry compressa su un server ftp
#!/bin/sh
date
echo “Inizio procedura backup XXXXXXXXX su FTP @XXX.XXX.XXX.XXX”
echo “cancellazione vecchio backup”
rm -rf /var/backups/texilee.it
echo “rm -rf /var/backups/texilee.it” $?
echo; echo “creazione nuova directory”
mkdir /var/backups/texilee.it
echo “mkdir /var/backups/texilee.it” $?
echo;
echo “Creazione tgz….”
cd /var/backups/texilee.it/
tar zcf sito.tgz /var/www/ || exit “Errore crezione tgz.”
ls -la /var/backups/texilee.it/
/usr/bin/curl -T /var/backups/texilee.it/sito.tgz ftp://usertexilee:[email protected]/texilewww.tgz
if [ $? -eq 0 ]
then
echo “backup in corso…”
else
exit $?
fi
echo “procedura completata correttamente”
date
mail -s “Automatic Backup FTP System NOTIFICATION” [email protected] << MAILBODY;
Copia di backup www.texilee.it eseguita correttamente su ftp.
MAILBODY
exit 0
apc smart ups script snmp bash
APC azienda leader nella fabbricazione di gruppo di continuità permette
via snmp il monitoraggio del device.
Alcune delle informazioni più importanti che si possono ottenere sono:
– lo stato delle batterie [Normal|Low]
– il tempo trascorso in modalità batteria
– il tempo massimo in modalità batteria
– la capacità in % delle batterie
– il rilevamento delle batterie da sostituire
– la temperatura delle batterie
– la temperature ambientale
Utilizzando delle semplici istruzioni snmp, due righe di bash e un canale (un demone…)
per interfacciarsi ad un gateway sms possiamo farci inviare dei messaggi sms in caso di problemi, oppure semplicemente ricevere ad intervalli regolari una mail informativa sullo stato.
Avendo ad esempio un condizionatore “casalingo” il gruppo di continuità può venirci incontro
offrendoci la possibilità materiale di ottenere la temperatura della nostra server farm.
NB: sono in commercio sensori per il rilevamento di umidità.
Installato snmp e scaricato il file MIB (Management Information Base) sotto /usr/share/snmp/mibs/powernetX.X.X.mib bisogna configurare il demone sul dispositivo ups.
Per farlo consultate il manuale del produttore.
Nell’esempio il dispositivo avrà indirizzo IP 192.168.30.11 e la community read “public”
Possiamo iniziare il polling dello stato con uno script
#!/bin/sh
echo "---------------------------------";
snmpget -OsQ -m "/usr/share/snmp/mibs/powernetX.X.X.mib" \
-v1 -c public 192.168.30.11 \
upsBasicBatteryStatus.0 \
upsBasicBatteryTimeOnBattery.0 \
upsAdvBatteryCapacity.0 \
upsAdvBatteryTemperature.0 \
upsAdvBatteryRunTimeRemaining.0 \
upsAdvBatteryReplaceIndicator.0 \
iemStatusProbeCurrentTemp.1
echo "---------------------------------";
echo;
exit 0
che produrrà un output molto chiaro
tex:~$ /usr/local/bin/upsinfo
---------------------------------
upsBasicBatteryStatus.0 = batteryNormal
upsBasicBatteryTimeOnBattery.0 = 0:0:00:00.00
upsAdvBatteryCapacity.0 = 100
upsAdvBatteryTemperature.0 = 29
upsAdvBatteryRunTimeRemaining.0 = 0:3:58:00.00
upsAdvBatteryReplaceIndicator.0 = noBatteryNeedsReplacing
iemStatusProbeCurrentTemp.1 = 24
---------------------------------
Per controllare lo stato della temperatura esterna (per creare grafici con mrtg, farsi inviare sms di allarme, ecc…) basterà inserire nello script:
CURTEM=`snmpget -Oqv -m "/usr/share/snmp/mibs/powernetX.X.X.mib" -v1 -c public 192.168.30.11 iemStatusProbeCurrentTemp.1`
e confrontare/salvare il valore di CURTEM.
vpopmail clean old maildir last authentication
Solitamente i clienti pressano per l’attivazione di una casella email, ma non si preoccupano minimamente di segnalare al gestore la disattivazione.
I metodi per recuperare la lista delle caselle in disuso sono molteplici (vpopmail permette anche la disattivazione automatica dopo un tot di tempo), io preferisco estrapolare la data dell’ultimo accesso e parsarsi un comodo fie formattato.
Il comando che genera il file
for i in `vpopbull -nV`;do echo -n "$i " ; vuserinfo $i |grep "last auth:" ; done
l’output è il seguente
[email protected] last auth: Never logged in
[email protected] last auth: Wed Sep 19 11:20:32 2007
[email protected] last auth: Never logged in
[email protected] last auth: Wed Sep 19 10:49:43 2007
[email protected] last auth: Never logged in
[email protected] last auth: Tue Jun 6 16:52:25 2006
e con poche combinazioni di bash si riesce ad esempio a risalire agli utenti “mai loggati” o a quelli “loggati l’anno scorso”.
clamav-daemon check script
Negli ultimi tempi su una macchina molto stressata ho disabilitato l’opzione di freshclam che imponeva il reload delle signature a clamd, commentandola
#NotifyClamd /etc/clamav/clamd.conf
Ho inoltre abbassato il tempo dell’opzione SelfCheck di clamd a 1800.
Il problema era molto grave perchè i processi clamd sparivano senza lasciare traccia (solo il logging di grsec mi segnalava il segmentation fault) mentre il socket rimaneva aperto, facendo andare in “palla” pure simscan.
Non sono riuscito a risolvere in maniera pulitissima e prima di cantare vittoria ho preparato uno script che controlla esistenza di pid, processi, socket e nel peggiore dei casi si occupa di fare un restart di clamd
Il codice per contare il numero dei processi (anche spamassassin gira sotto clamav)
ssh texilee.it ps --User=clamav u| grep /usr/sbin/clamd |wc -l
Dopodichè se tutti i test di “vita” falliscono forzo il restart del demone.
Se qualcuno ha lo stesso problema (magari..) o vuole cimentarsi nel debugging mi può rispondere sul blog o via mail o qui
grep awk strip empty commented lines
Strip out empty or commented code.
grep -e "^[^#]" /etc/file.conf
awk '{ if ($0 !~ /^[#]|^$/) print $0 ;}' /etc/file.conf
Realtime block list stats for qmail
Per ottenere qualche statistica sull’efficenza della varie rbl sul sistema di posta ecco un semplice file di cron
Ogni giorno alle 7:23 root esegue
23 7 * * * root
Info sulla macchina
echo "RBL REPORT NS1" &&
E il ciclo che genera le stats
for i in zen.spamhaus.org dul.dnsbl.sorbs.net; \\\ do echo $i && grep "$i" /var/log/mail.log.0 | \\\ awk '{print $8}'|sort|uniq|sort|wc -l; \\\ done
Come esempio ho usato zen.spamhaus.org dul.dnsbl.sorbs.net metteteci quelle cheusate voi separate da spazi.
BASH Squid linea di comando awk
Squid è un ottimo proxy server, per conoscere quali sono i domini più cliccati dai nostri utenti possiamo usare una linea di script bash. Ipotizziamo un formato di log del genere
1169028202.491 2456 192.168.1.1 TCP_MISS/200 9013 POST http://www.5t.torino.it/5t/it/percorsi – DIRECT/213.215.218.134 text/html
Contiamo (a occhio va bene) in che posizione si trova la entry relativa alla url richiesta. Il separatore che uso è lo spazio.
1) 1169028202.491
2) 2456
3) 192.168.1.1
4) TCP_MISS/200
5) 9013
6) POST
7) http://www.5t.torino.it/5t/it/percorsi
8) –
9) DIRECT/213.215.218.134
10) text/html
Con awk e la funzione split delimito solo il dominio, dopodichè uso il solito procedimento di ordinamento (sort) e conteggio numerico (uniq -c)
cat /var/log/squid/access.log | \\ awk '{ split($7,url,/\\//); print url[3] }' | \\ sort | uniq -c | sort -nr | less
Si ottiene la “classifica” domini per hits