Pagina 1 di 1
script funzionamento processi
Inviato: gio 13 set 2007, 10:34
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?
Inviato: gio 13 set 2007, 18:12
da alessiodf
Codice: Seleziona tutto
~> cat /proc/self/status | grep State
State: R (running)
perl???
fai prima con bash
ps: self = #PID processo
Inviato: gio 13 set 2007, 18:17
da targzeta
E se fai:
Che ci perdi? Perchè lanciare due processi quando grep è stato inventato a posta?
Spina
Inviato: gio 13 set 2007, 18:25
da alessiodf
spina ha scritto:
E se fai:
Che ci perdi? Perchè lanciare due processi quando grep è stato inventato a posta?
Spina
ovvio ma... o,o
che centra?

Inviato: gio 13 set 2007, 20:48
da targzeta
alessiodf ha scritto:ovvio ma... o,o
che centra?

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:
e poi fare un controllo con:
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
Inviato: gio 13 set 2007, 23:23
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...
Inviato: ven 14 set 2007, 9:45
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
Inviato: ven 14 set 2007, 10:09
da alessiodf
che ti ritorna quando il processo e' in running?
Inviato: ven 14 set 2007, 14:29
da marco79
Inviato: ven 14 set 2007, 14:46
da alessiodf
posta... ho un presentimento...

Inviato: ven 14 set 2007, 15:39
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
Inviato: ven 14 set 2007, 16:37
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/

Inviato: mar 18 set 2007, 9:11
da marco79
Con questo script funziona

Vorrei capire pero perché con l'altro non funziona quale era il tuo presentimento?
Inviato: mar 18 set 2007, 17:47
da alessiodf
bho... faccio + o - le stesse operazioni dello script!
semmai usa questo e ci metti codice html!

Se hai difficolta' dimmi, che ti aiuto!
il presentimento era che come cups, anche asterisk avesse un pid-file vuoto!
