script funzionamento processi

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
marco79
Linux 2.x
Linux 2.x
Messaggi: 451
Iscritto il: gio 14 ott 2004, 0:00
Località: Como
Contatta:

script funzionamento processi

Messaggio da marco79 »

Ciao a tutti ho uno script perl che va a leggere se un processo é attivo e scrive poi del codice html .Per far questo va a leggere il file /var/run/asterisk.pid nel mio caso e altri /var/run/crond.pid /var/run/httpd.pid.Il problema é che pur essendo tutti i processi funzionanti il processo relativo ad asterisk risulta STOPPED secondo lo script penso per un problema di permessi:


-rw-r--r-- 1 root root 5 Sep 12 12:40 asterisk.pid
-rw-r--r-- 1 root root 5 Sep 11 16:19 crond.pid
-rw-r--r-- 1 root root 5 Sep 11 16:19 httpd.pid

Quale puo essere il problema?

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Messaggio da alessiodf »

Codice: Seleziona tutto

~> cat /proc/self/status | grep State
State:  R (running)
perl??? :oops:

fai prima con bash

ps: self = #PID processo

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

alessiodf ha scritto:

Codice: Seleziona tutto

~> cat /proc/self/status | grep State
E se fai:

Codice: Seleziona tutto

 > grep State /proc/self/status
Che ci perdi? Perchè lanciare due processi quando grep è stato inventato a posta?

Spina

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Messaggio da alessiodf »

spina ha scritto:
alessiodf ha scritto:

Codice: Seleziona tutto

~> cat /proc/self/status | grep State
E se fai:

Codice: Seleziona tutto

 > grep State /proc/self/status
Che ci perdi? Perchè lanciare due processi quando grep è stato inventato a posta?

Spina
ovvio ma... o,o

che centra? :oops:

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6643
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggio da targzeta »

alessiodf ha scritto:ovvio ma... o,o

che centra? :oops:
Niente :), solo che in molti post leggo la sequenza
cat | grep
, non ho capito ancora se molti la usano perchè vista in altri thread o perchè l'hanno letta da qualche parte.....bhò, alla fine, chi se ne frega :).

comunque sono convinto come te che non bisogna scomodare perl, ma penso che lui lo faccia per generare il codice html.


@marco79
Io non credo ci siano errori di permessi, da quello che hai postato chiunque può aprire il file in lettura. Come fà lo script ad identificare che il processo è in run? Legge il pid e poi fa un controllo? Se si, che controllo fa? Come suggerito da alessiodf, puoi prelevare il pid dal file, ad esempio con:

Codice: Seleziona tutto

pid=`cat /var/run/asterisk.pid`
e poi fare un controllo con:

Codice: Seleziona tutto

grep State /proc/$pid/status
comunque, a regola, se esiste il file "asterisk.pid", a prescindere, il processo dovrebbe essere in run, dipende anche da cosa si intende per "run".

Spina

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Messaggio da alessiodf »

non ho capito ancora se molti la usano perchè vista in altri thread o perchè l'hanno letta da qualche parte.....bhò, alla fine, chi se ne frega
chiamandosi pipe-line aiuta a `seguire` le operazioni...

Avatar utente
marco79
Linux 2.x
Linux 2.x
Messaggi: 451
Iscritto il: gio 14 ott 2004, 0:00
Località: Como
Contatta:

Messaggio da marco79 »

Il fatto di usare perl dipende dal fatto che lo script non l'ho fatto io e poi perchè genera del codice html che viene richiamato in un pagina php.Lo script usa una funzione:
.

Codice: Seleziona tutto

sub isrunning
{
        my $cmd = $_[0];
        my $status = "<TABLE CELLPADDING='2' CELLSPACING='0' BGCOLOR='$colourlightred'><TR><TD>stopped</TD></TR></TABLE>";
        my $pid = '';
        my $testcmd = '';
        my $exename;

        $cmd =~ /(^[a-z]+)/;
        
        $exename = $1;

        if (open(FILE, "/var/run/${cmd}.pid"))
        {
                $pid = <FILE>; chop $pid;
                close FILE;
                if (open(FILE, "/proc/${pid}/status"))
                {
                        while (<FILE>)
                        {
                                if (/^Name:\W+(.*)/) {
                                        $testcmd = $1; }
                        }
                        close FILE;
                        if ($testcmd =~ /$exename/)
                        {
                                $status = "<TABLE CELLPADDING='2' CELLSPACING='0' BGCOLOR='$colourlightgreen'><TR><TD>running</TD></TR></TABLE>";
                                if (open(FILE, "/proc/${pid}/cmdline"))
                                {
                                        my $cmdline = <FILE>;
                                        if (!$cmdline) {
                                                $status = "$status (swapped)"; }
                                }
                        }
                }
        }

        return $status;
}
In pratica va a vedere se cé il pid.
Asterisk funziona come gli altri solo che gli altri mi dice running e asterisk stopped...bo

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Messaggio da alessiodf »

Codice: Seleziona tutto

cat /var/run/asterisk.pid
che ti ritorna quando il processo e' in running?

Avatar utente
marco79
Linux 2.x
Linux 2.x
Messaggi: 451
Iscritto il: gio 14 ott 2004, 0:00
Località: Como
Contatta:

Messaggio da marco79 »

Codice: Seleziona tutto

cat /var/run/asterisk.pid
8779

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Messaggio da alessiodf »

Codice: Seleziona tutto

cat "/proc/`cat /var/run/asterisk.pid`/status"
posta... ho un presentimento... :D

Avatar utente
marco79
Linux 2.x
Linux 2.x
Messaggi: 451
Iscritto il: gio 14 ott 2004, 0:00
Località: Como
Contatta:

Messaggio da marco79 »

Codice: Seleziona tutto

 cat /proc/`cat /var/run/asterisk.pid`/status
Name:   asterisk
State:  S (sleeping)
SleepAVG:       78%
Tgid:   8779
Pid:    8779
PPid:   8775
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmPeak:    25160 kB
VmSize:    25120 kB
VmLck:         0 kB
VmHWM:     10404 kB
VmRSS:     10400 kB
VmData:    12408 kB
VmStk:        88 kB
VmExe:       860 kB
VmLib:      9324 kB
VmPTE:        60 kB
StaBrk: 08132000 kB
Brk:    09cd9000 kB
StaStk: bfba06a0 kB
ExecLim:        49eb6000
Threads:        22
SigQ:   1/7162
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000001004
SigCgt: 0000000181414003
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
Cpus_allowed:   ffffffff
Mems_allowed:   1

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Messaggio da alessiodf »

Codice: Seleziona tutto

#!/bin/bash
# @author: Slux <alessiodf>
RUN_DIR="/var/run/"

# here only the file names without the extension
ARRAY_PIDS=( crond httpd mysqld pure-ftpd sshd cups hald )
####################################

cd $RUN_DIR


echo -e "#PID\tPid file\tState"
echo
for fpid in `echo ${ARRAY_PIDS[*]}` 
	do
	CURRENT_PID=`cat $fpid.pid`
	if [[ "$CURRENT_PID" =~ [0-9]+ ]]
		then 
		echo -en "$CURRENT_PID\t"
		echo -en "$fpid\t\t"
		
		if [[ "`grep Name /proc/$CURRENT_PID/status`" =~ $fpid ]]
			then
			echo -e "RUNNING"
		else
			echo -e "NOT RUNNING"
		fi
		
	else 
		echo -e "Empty\t$fpid\t\tUnknow"
	fi
done

prova questo e vedi che ti restituisce! a me questo:

Codice: Seleziona tutto

#PID    Pid file        State

5951    crond           RUNNING
6143    httpd           RUNNING
6058    mysqld          RUNNING
6087    pure-ftpd       RUNNING
6018    sshd            RUNNING
Empty   cups            Unknow
5905    hald            RUNNING
nell'array ARRAY_PIDS aggiungi quelli che hai tu sotto /var/run/ 8)

Avatar utente
marco79
Linux 2.x
Linux 2.x
Messaggi: 451
Iscritto il: gio 14 ott 2004, 0:00
Località: Como
Contatta:

Messaggio da marco79 »

Con questo script funziona :)
Vorrei capire pero perché con l'altro non funziona quale era il tuo presentimento?

Avatar utente
alessiodf
Linux 3.x
Linux 3.x
Messaggi: 823
Iscritto il: ven 14 ott 2005, 21:04
Slackware: current
Kernel: 2.6.26.4
Desktop: Kde 4.1
Località: Roma
Contatta:

Messaggio da alessiodf »

bho... faccio + o - le stesse operazioni dello script! :)

semmai usa questo e ci metti codice html! :o Se hai difficolta' dimmi, che ti aiuto!

il presentimento era che come cups, anche asterisk avesse un pid-file vuoto! :?

Rispondi