Problema con script per demone ciclico

Domande e richieste di un principiante alle prime armi con Ubuntu e il mondo GNU/Linux in generale. Per domande specifiche, utilizzare le altre sezioni.
Regole della sezione
In questa sezione possono inserire nuove discussioni solo coloro che fanno parte del livello "Prode Principiante" e che non hanno superato i 100 messaggi, tutti gli altri possono comunque rispondere regolarmente. Se si fa parte di questo livello e si è registrati al forum prima del 24 aprile 2012, data del passaggio al nuovo forum, consultare questa discussione.

Immagine Come usare UbuntuPrimi passi su Ubuntu Immagine Amministrazione del sistemaComandi di baseInstallare programmiLog di sistemaRiga di comandoSudo
zeatles
Prode Principiante
Messaggi: 6
Iscrizione: giovedì 12 giugno 2008, 12:07

Problema con script per demone ciclico

Messaggio da zeatles »

Ciao a tutti, premetto che sono un neofita di linux ma per necessità di lavoro ho realizzato un piccolissimo script su un dispositivo di IO che utilizza un core linux e che controlla ogni 4-5 secondi quante istanze di un processo ci sono e se tale numero supera 4 il demone scrive una data in un logfile e killa tutte le istanze altrimenti si mette in sleep per 4 secondi e poi riparte (tutto cioè è racchiuso dentro ad un while).
Lo script sembra funzionare correttamente solo che mi sono accorto che nonostante non faccia praticamente niente fa salire il carico della cpu e man mano che passano le ore e i giorni occupa sempre più memoria senza rilasciarla e non capisco come mai. Al contrario ho realizzato un processo che controlla se un altro processo è attivo e se non lo è lo richiama altrimenti anch'esso si mette in attesa per 4-5 secondi e poi riparte. Solo che in questo ultimo caso non ho ne una crescente occupazione di memoria ne tanto meno un carico elevato sulla CPU.
Vi allego le 2 righe di codice dello script in modo da capire se sbaglio qualcosa e se sapete consigliarmi su come poterlo modificare.

#!/bin/bash
while[1]
do
X=$(ps | grep -v grep | grep ./home/nome_processo | wc -l)
if [$X -gt 4]
then
/bin/date >> /home/log.txt
killall -9 pidof nome_processo
fi
sleep 4
done

Grazie a tutti
Ciao
Avatar utente
bingel
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4026
Iscrizione: lunedì 3 aprile 2006, 10:17

Re: Problema con script per demone ciclico

Messaggio da bingel »

...dubito che il codice che hai postato funzioni correttamente. Questo invece dovrebbe funzionare:

Codice: Seleziona tutto

#!/bin/bash
while true; do
  x=$(ps -ef | grep -v grep | grep './home/nome_processo' | wc -l)
  if [[ $x -gt 4 ]]; then
    /bin/date >> /home/log.txt
    killall -9 nome_processo
  fi
  sleep 4
done 
zeatles
Prode Principiante
Messaggi: 6
Iscrizione: giovedì 12 giugno 2008, 12:07

Re: Problema con script per demone ciclico

Messaggio da zeatles »

Ciao bingel, grazie per il consiglio. Il problema non è tanto se lo script funziona (ho provato più volte e sembra funzionare senza problemi), quanto sapere il motivo per cui mi occupa il processore in modo eccessivo e più importante ancora causa una occupazione di memoria sempre maggiore che non si libera mai.
Non viene in mente niente a nessuno?
Avatar utente
Laycastle
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1183
Iscrizione: sabato 9 aprile 2011, 21:54
Desktop: KDE 4.8
Distribuzione: Gentoo ~amd64
Località: Torino

Re: Problema con script per demone ciclico

Messaggio da Laycastle »

Ciao,
quello postato in precedenza contiene diversi errori, io farei una prova quello di bingel e verificare se da gli stessi problemi.

p.s. non so di che genere di dispositivo stiamo parlando, ma se, per caso, hai a disposizione un demone cron potresti gestire il tutto in maniera molto più flessibile. :)

p.p.s
@bingel grep -c...!! :asd:
la via più breve tra due punti è l'arabesco.
Avatar utente
bingel
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4026
Iscrizione: lunedì 3 aprile 2006, 10:17

Re: Problema con script per demone ciclico

Messaggio da bingel »

Non so come tu abbia verificato il funzionamento del tuo script ma a parte i vari dettagli che ho aggiustato (senza tali aggiustamenti probabilmente funzionerebbe lo stesso), la cosa importante che mancava era il parametro "-ef" del comando "ps". Senza tale parametro mi pare quasi impossibile che il risultato possa essere quello voluto.

Prova semplicemente ad eseguire un

Codice: Seleziona tutto

ps
da terminale (senza alcun parametro) e ti renderai conto da solo che il relativo output è del tutto inutile ai tuoi fini.
Scrivi risposta

Ritorna a “Dilemmi del principiante”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti