Come Controllare i Processi su Linux con Supervisord

Parliamo oggi di supervisord, un sistema di controllo dei processi. Questi sistemi hanno la funzione di garantire che altri processi siano costantemente attivi. Possono essere quindi elementi importanti per garantire l’affidabilità di un servizio soprattutto nei casi in cui il daemon da controllare è sviluppato in casa e da, quindi, molta meno affidabilità di un daemon con migliaia di istallazioni.

Il primo passo è, come sempre, istallare supervisord. Lo possiamo fare dal sito del progetto o utlizzando il sistema di pacchetti della propria distribuzione. Su Debian o Ubuntu:

aptitude install supervisor
Ad istallazione effettuata si avrà il demone supervisord e il tool di controllo supervisorctl. Inoltre il demone può essere configurato per rispondere a chiamate html (di default sulla porta 9001) sia per monitoraggio via browser sia per gestione tramite API xml-rpc.

Per prima cosa esaminiamo la configurazione di default che arriva con il pacchetto Ubuntu:

; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
chmod=0700 ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor ; (‘AUTO’ child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket

; The [include] section can just contain the “files” setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf
Come avviene in moltissimi casi i parametri di configurazione sono raggruppati in paragrafi.

[unix_http_server]: contiene i parametri necessari a definire il socket unix per le connessioni a supervisord.
[supervisord]: configurazione vera e propria del daemon; file di log, file di lock.
[rpcinterface:supervisor]: serve ad abilitare l’interfaccia rpc
[supervisorctl]: parametri passati usati al client; ad esempio come connettersi al server se non specificato altrimenti
[include]: un elenco di file da includere. Tipicamente uno per ogni tipo di daemon da controllare con le specifiche direttive.
Come prima cosa attiviamo l’interfaccia web abilitando un’utenza ed una password. Aggiungiamo o modifichiamo quindi il paragrafo inet_http_server con i seguenti valori:

[inet_http_server]
port = 127.0.0.1:9001
username = user
password = 123
e riavviamo il daemon

/etc/init.d/supervisord restart
Possiamo ora accedere all’interfaccia web connettendoci in localhost sulla porta 9001 ed inserendo i dati dell’account quando richiesti.

Creiamo ora uno script che utilizzeremo come daemon di test e configuriamo supervisord per gestirlo.

Editiamo quindi un file denominato test_supervisord.sh con il nostro editor di riferimento ed inseriamoci il seguente codice:

#!/bin/sh
while [ true ]; do
ls -lh /tmp/
rm /tmp/pippo
touch /tmp/pippo
sleep 5
done
cambiamo poi i permessi per renderlo eseguibile

chmod 700 test_supervisord.sh
Creiamo ora la configurazione su supervisord per dirgli di gestire questo daemon. Andremo ad inserire nel file /etc/supervisor/conf.d/test.conf il seguente contenuto

[program:test_supervisord]
command=/tmp/test_supervisord.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/test.err
stdout_logfile=/var/log/supervisor/test.log
dove, in un apposito paragrafo specifichiamo

[program:test_supervisord]: il nome del daemon da riportare sui vari report
command=/tmp/test_supervisord.sh: il comando da eseguire
autostart=true: se deve partire automaticamente all’avvio
autorestart=true: se deve essere riavviato in caso di interruzione
stderr_logfile=/var/log/supervisor/test.err: file di log in cui viene registrato l’output del daemon
stdout_logfile=/var/log/supervisor/test.log file di log in cui vengono riportato lo standard error del daemon
I parametri specificabili sono molti altri. Ad esempio

user: permette di specificare l’utente con cui il daemon viene eseguito
environment: accetta coppie chiave-valore che vengono trasformate in variabili di ambiente per l’esecuzione del daemon.
Per rendere attiva la nuova configurazione si può procedere con uno tra

kill -HUP “PID”
supervisorctl reread && supervisorctl update
o anche attraverso l’interfaccia web visto che l’abbiamo attivata.

supervisorctl rimane comunque l’interfaccia di eccellenza di questo sistema.

Al suo avvio presenta l’elenco dei demoni configurati ed il loro stato. Ed il comando help mostra cosa può essere fatto all’interno di questa command line.

root@nb:/etc/supervisor/conf.d# supervisorctl
test_supervisord RUNNING pid 8443, uptime 0:03:40
supervisor> help

default commands (type help ):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version

supervisor>
stop, start, restart e status serviranno ad esempio a gestire i vari daemon. reread e update li abbiamo già visti in azione. Quit permette di lasciare questa shell.

Approfondisci

Come Funziona il Database Redis

Nell’ articolato panorama dei database nosql riveste un certo interesse Redis. Questo database ancora immaturo per gli aspetti di scalabilità e di alta affidabilità è sicuramente interessante per le prestazioni.

Redis, generalmente indicato come respository chiave/valore, è in realtà in grado di gestire 5 tipi di dato differente ognuno adatto ad ottimizzare le prestazioni di specifiche operazioni. Redis fa infatti della velocità il suo punto di forza.

In Redis possono essere immagazzinati:

stringhe
hash
liste
set
sorted set
Redis dispone anche della possibilità di scrivere delle stored procedure in LUA.

Questo database lavora mantenendo tutti i dati in memoria ma al tempo stesso è in grado di garantire la persistenza dei dati attraverso due meccanismi, entrambi disattivabili:

il salvataggio periodico del dataset su disco triggerabile sia su base temporale sia sulla base del numero di modifiche
la produzione di log delle modifiche
Redis dispone inoltre di un sistema di replica che permette di generare copie di un repository a caldo. Ci sono poi altri tool legati alla clusterizzazione ma che al momento attuale non sono in verisone stabile.

Per un’istallazione di test la via più comoda è come sempre ricorrere ai pacchetti della propria distribuzione:

aptitude install redis-server
Su debian è opportuno ricorrere ai pacchetti di backport visto che come tutti i sistemi nosql, Redis è un prodotto piuttosto giovane e ci sono spessp importanti fix nelle nuove versioni.

Sul manuale del prodotto sono riportate due considerazioni di cui è meglio tener conto:

è bene che il server disponga di molto swap perché in alcune situazioni Redis arriva anche a raddoppiare l’uso della memoria e nel caso questa finisca il kernel va in protezione ed uccide il processo.
Redis ha problemi con l’uso standard di Linux della memoria virtuale; viene quindi consigliato di impostare ad uno vm.overcommit_memory
Redis può essere fatto lavorare in una modalità analoga a quella di una cache impnendogli di sovrascrivere i TTl degli oggetti se si presenta la necessità di liberare memoria.

Con il pacchetto viene istallato anche un client

redis-benchmark
redis-cli
Il primo permette una prima verifica del funzionamento del sistema e da un’idea delle prestazioni del sistema. Il secondo è un client che permette di interrogarlo.
Ovviamente l’accesso più naturale ad un sistema di questo tipo sono le librerie di qualche linguaggio.

Ad ogni modo una volta dentro si possono ottenere informazioni sullo stato del daemon con il comando info:

$>redis-cli
redis 127.0.0.1:6379> info
oppure si possono gestire i dati con i molti comandi possibili:

redis 127.0.0.1:6379> set nome:pippo ‘{“città”: topolinia, “razza”: cane}’
redis 127.0.0.1:6379> get nome:pippo
get e set sono alcuni dei comandi relativi alle stringe. Per la gestione di altri tipi di dati ci sono i comandi relativi.

Approfondisci

Come Analizzare i Log Awstats

Generalmente l’analisi del traffico sui siti web viene fatto strumenti sul genere di google analytics che si basano su chiamate dei client, generate da javascript, a siti di terze parti che si occupano della raccolta e della reportistica dei dati.

I server web generano però enormi quantità di log che contengono molti dettagli su tutte le attività del sito web. Nel caso di problemi specifici gli strumenti per analizzarli sono i vari tool della shell e il magari il perl ma se quello che si vuole è monitorare l’andamento del sito la cosa migliore è ricorrere a tool specifici. Uno dei tool storici per questa attività in ambiente LAMP è awstats.

Awstats è un insieme di scripts che si occupa di analizzare i log che gli vengono serviti e genera dei report fruibili poi attraverso un server web. Awstats è in grado di lavorare molti tipi di log che spaziano da quelli di svariati tipi di web server (come Apache o anche IIS) a quelli di ftp server o mail server.

Awstats non è il solo tool e loro stessi riportano una tabella di comparazione con altri prodotti analoghi.

Passiamo ora ad esaminare come configurare awstats. Come iare sempre non troverete qui una guida completa ma un punto di partenza per poter iniziare ad esplorare le potenzialità di questo prodotto.

La prima cosa è ovviamente istallarlo. Anche awstats è presente in gran parte delle distribuzioni. Su debian/ubuntu potrete quindi procedere con:

aptitude update
aptitude search awstats
aptitude install awstats apache2
Alternativamente dal sito di awstats è possibile effettuare il download dell’ultima versione stabile.

Se si procede da pacchetto si avranno a questo punto nella directory

/usr/share/doc/awstats/examples
molti file di esempio utili.

Iniziamo ora dalla configurazione di apache necessaria per la visulizzazione dei report: bisogna infatti istruire apache a mostrare i report aggiungendo ad un vhost le seguenti direttive:

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory “/usr/lib/cgi-bin”>
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all

Alias /awstatsclasses “/usr/share/awstats/lib/”
Alias /awstats-icon “/usr/share/awstats/icon/”
Alias /awstatscss “/usr/share/doc/awstats/examples/css”
ScriptAlias /awstats/ /usr/lib/cgi-bin/
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
E’ necessario poi riavviare apache.

Passiamo ora all’anailsi dei file. Cominciamo facendo una copia del file /etc/awstats/awstats.conf rinominandolo in awstats.dominio.it.conf.
Le righe fondamentali da editare al suo interno sono

LogFile: che dovrà contenere il nome completo di path dei log da esaminare
SiteDomain: che conterrà il nome del dominio
HostAliases: per indicare, separati da spazi, eventuali nomi alternativi del dominio
LoadPlugin: vorremo probabilmente aggiungere almeno “ipv6”
LogFormat: permette di descrivere in dettaglio il formato dei log se non sio è utilizzato quello standard di apache o squid.
I parametri configurabili sono veramente molti e, se non la documentazione, il file merita almeno una scorsa per individuare elementi di interesse.

A questo punto non rimane che scaricare il file di log nella directory e far parsare il file ad awstats. Da sottolineare che i vari file di log devono essere processati nell’ordine in cui vengono generati e che il nome nella configurazione è univoco e bisognerà quindi o copiare giorno per giorno il file di log nella directory designata sovrascrivendo il precedente o sfruttare un link simbolico. Si tratta comunque di un’attività facilmente automatizzabile.

Procediamo quindi con il parse

/usr/lib/cgi-bin/awstats.pl -config=dominio.it -update
Se apache è stato configurato sulla propria macchina e se l’elaborazione è stata fatta localmente sarà possibile vedere il report sull’url

http://localhost/awstats/awstats.pl?output=main&config;=dominio.it&framename;=index

Approfondisci

Come Bloccare il Computer Quando si è Assenti

Ogni volta che ti metti al computer per svolgere un lavoro, hai paura che qualcun’altro possa combinare dei guai non appena ti alzi. Per tale motivo, sei costretto a portarti il computer appresso ovunque vai, nonostante sia una soluzione a dir poco scomoda. Non temere, ho una guida che fa proprio al caso tuo. Nella guida odierno andremo a scoprire come bloccare il computer in nostra assenza.

Devi sapere che la maggior parte dei PC dispongono di opzioni specifiche per bloccare il dispositivo. In questo modo, potrai allontanarti dal computer senza la paura che qualcun’altro si avvicini, cancellando tutto il lavoro che hai fatto fino a quel momento. Il primo requisito per attuare ciò è avere un account con la password. Se ancora non lo hai creato, recati nel Pannello di controllo e fai clic sulla sezione Account utente.

A questo punto, puoi decidere di aggiungere un nuovo account utente con la password oppure di aggiungere la password al tuo account già esistente. Nel primo caso clicca su Aggiungi un nuovo account, mentre nel secondo caso premi su Crea password. Tieni presente che, la password che sceglierai, deve essere complessa. Non inserire il tuo nome, cognome, data di nascita o altre parole facilmente indovinabili.

Infine, devi compiere l’ultimo passo. Quando sei costretto ad allontanarti dalla tua postazione, premi la combinazione di tasti CTRL + ALT + CANC e scegli la voce Blocca computer. In tale maniera, il Pc si bloccherà subito e nessuno potrà usarlo. Per sbloccarlo sarà necessario inserire la password, cioè la chiave di sicurezza che hai scelto in precedenza.

Approfondisci

Come Aumentare Cache di Firefox

Il mondo dei browser si suddivide in tre grosse categorie: la prima riguarda gli utenti che utilizzano il browser prodotto da Microsoft che è il più datato in questo settore; la seconda vede coloro che usano Google Chrome, il programma di casa Google che punta tutto sulla velocità di navigazione; la terza, invece, è costituita dalle persone che fanno uso di Mozilla Firefox, la volpe rossa più veloce del web!

Oggi ci occuperemo di vedere proprio una funzionalità che ha a che fare con Firefox. Nella guida di oggi andremo a conoscere la modalità per aumentare la memoria cache del software! Non sai di cosa si tratta? La memoria cache è un’area che propone una memoria temporanea. Essa memorizza un insieme di dati che verranno usati in seguito per caricare più velocemente le pagine web!

Per aumentare la cache di Firefox, apri il browser e fai clic sul menù in alto per scegliere la voce Opzioni. Scegli la scheda Avanzate e premi sul settore dedicato alla Rete. Imposta il limite della cache a 1024 MB e fai clic su OK per salvare le modifiche che hai appena effettuato al programma. Poi, digita nella barra degli indirizzi la parola about: config e premi sul pulsante Invio della tastiera.

In questo modo, aprirai una schermata avanzata per la gestione di Mozilla Firefox. Clicca in una zona vuota della pagina e scegli Crea un nuovo valore. Seleziona la voce Intero e digita il parametro browser. Cache. Memory. Capacity con un valore di 1024 MB. Conferma le modifiche, riavvia il sistema ed il gioco è fatto. Ora sei pronto a navigare con più cache.

Approfondisci