# [HELP] Mi servirebbe uno script in bash

## unz

Ho un problemaccio con un server remoto, la swap si riempie in meno che non si dica uccidendo il sistema. Al 90% è apache che fa le bizze, ma non escludo problemi hw ... stiamo cercando di venirne a capo.

Nel mentre mi servirebbe uno script da mandare nel cron affinche monitori la memoria di swap utilizzata e quindi riavviare apache se viene raggiunto un limite.

Avete qualcosa di pronto?

Grazie in anticipo  :Wink: 

----------

## cloc3

Una cosa così?

```

 if [ `cat /proc/meminfo |grep SwapFree:|sed -e 's/[^[:digit:]]//g'` -lt 10000 ];then echo miocomando;fi

```

al posto di 100000000000 metti il tuo limite, al posto di echo miocomando riavvii apache o altro.

----------

## fedeliallalinea

Pronto no ma utilizzando /proc/meminfo non penso sia un problema. Qualcosa del genere

```
#!/bin/sh

SWAPFREE=`cat /proc/meminfo | grep SwapFree | awk '{print $2}'`

SWAPMIN=${1}

while [ 1 ]; do

        if [ ${SWAPFREE} -lt ${SWAPMIN} ]; then

                /etc/init.d/apache stop

        fi

done
```

Usandolo nel seguente modo

```
$ ./nomescript valore
```

dove valore e' il valore minimo in kb che puo raggiungere la swap

----------

## unz

spettacolari come sempre  :Very Happy: 

grazie mille

----------

## makoomba

 *fedeliallalinea wrote:*   

> Pronto no ma utilizzando /proc/meminfo non penso sia un problema. Qualcosa del genere...

 

/me che aggiungerebbe uno sleep nel loop...

altrimenti oltre allo swap, c'ha pure il load al 100%

----------

## unz

non mi funzia nel cron ... avrò sbagliato qualcosa.

in /etc/cron.d ho inserito un file chiamato swap

```
** ogni 5 minuti controlla lo stato di swap libera, se supera il limite impostato riavvia apache

0,5,10,15,20,25,30,35,40,45,50,55 * * * * root  ./root/swap.sh 1416824

```

ma non parte ... swap.sh è lo script di fedeli [reso +x]

----------

## !equilibrium

 */etc/sysctl.conf wrote:*   

> vm.swappiness = 0

 

e poi un bel

 *Quote:*   

> sysctl -p

 

dovrebbe aiutare a swappare molto meno.

----------

## koma

metti il path completo perchè non lo prende altrimenti  :Smile: 

----------

## unz

 *DarkAngel76 wrote:*   

>  */etc/sysctl.conf wrote:*   vm.swappiness = 0 
> 
> e poi un bel
> 
>  *Quote:*   sysctl -p 
> ...

 

purtroppo il kernel per ora è un 2.4 e lo swappiness non c'è ... sto spingendo per aggiornare almeno il kernel ma sono cacasotto ... maledetti debiani_stable 

@koma

il path completo è quello ...  /root/swap.sh

----------

## cloc3

 *unz wrote:*   

> @koma
> 
> il path completo è quello ...  /root/swap.sh

 

Io sono daccordo con Koma.

Nel codice che hai postato leggo un punto di troppo:

 *Quote:*   

> 
> 
> ** ogni 5 minuti controlla lo stato di swap libera, se supera il limite impostato riavvia apache 
> 
> 0,5,10,15,20,25,30,35,40,45,50,55 * * * * root  ./root/swap.sh 1416824
> ...

 

----------

## fedeliallalinea

 *makoomba wrote:*   

> /me che aggiungerebbe uno sleep nel loop...
> 
> altrimenti oltre allo swap, c'ha pure il load al 100%

 

E direi di si l'ho proprio scritto di getto... comunque aveva bisogno di un comandso unico da mettere in cron.

----------

## unz

```
0 6 *  * * root  /root/swap.sh 1416824

```

così attacca alle 6 di mattina

```
#!/bin/sh

SWAPFREE=`cat /proc/meminfo | grep SwapFree | awk '{print $2}'`

SWAPMIN=${1}

while [ 1 ]; do

        if [ ${SWAPFREE} -lt ${SWAPMIN} ]; then

                /etc/init.d/apache stop

        fi

sleep 120

done
```

così dorme per 2 minuti e la cpu ringrazia

Quello che mi chiedo ora ... domani mattina ripartirà un processo identico?

----------

## Kernel78

o lanci uno script che cicla all'infinito (con sleep annesso)

o lanci un comando ogni X minuti con cron

Se lanci uno script con loop infinito tramite cron questo script verrà rilanciato da cron, nel tuo esempio ne lancerà uno alle 6 di mattina ogni giorno ma nessuno di questo terminerà mai.

----------

## neryo

 *Kernel78 wrote:*   

> o lanci uno script che cicla all'infinito (con sleep annesso)
> 
> o lanci un comando ogni X minuti con cron
> 
> Se lanci uno script con loop infinito tramite cron questo script verrà rilanciato da cron, nel tuo esempio ne lancerà uno alle 6 di mattina ogni giorno ma nessuno di questo terminerà mai.

 

io ti consiglio di usare solo lo script che controlla senza loop con il cronjob. E' fatto apposta!   :Wink: 

----------

## fedeliallalinea

 *neryo wrote:*   

> io ti consiglio di usare solo lo script che controlla senza loop con il cronjob. E' fatto apposta!  

 

Infatti! Non avevo letto che lo voleva mettere nel cron

----------

## unz

La soluzione ottimizzata è stata quella di eliminare il ciclo dallo script e far partire il comando ogni 10 minuti col cron ... funziona a dovere  :Wink: 

----------

## horace

mi appoggio a questo thread...sto provando a fare uno scriptino da mettere in cron per farmi mandare via mail, giornalmente, il log di apache...solo che a volte, come per esempio, oggi, la mail mi arriva strana:

 *Quote:*   

> 
> 
> FROM: root@server
> 
> TO:XXX.XXX@gmail.com, root@server, -r, 2006-02-10, apache
> ...

 

lo script è il seguente:

```

cat /var/log/apache2/access_log | nail -s log apache `date "+%F"` -r root@server XXX.XXX@gmail.com

```

non mi sembra che ci siano errori eclatanti...o si?   :Very Happy: 

----------

## codadilupo

direi che lo script funziona, altrimenti non ti arriverebbe la mail.

La domanda é: dai qualche altro comando per pulire il log ?

Coda

----------

## horace

scusa, ma non capisco cosa intendi con "dai qualche altro comando per pulire il log"

----------

## Kernel78

Magari usi logrotate e quindi il file viene "ripulito" prima di esserti inviato ...

A me succede qualcosa di simile, mi faccio inviare ogni giorno il log delle autenticazioni riuscite o errate e uso logrotate per non affogare nei log.

Se un giorno non mi collego e non ricevo tentativi di connessioni da parte di lamer il giorno dopo la mail che mi arriva è vuota.

----------

## horace

hai perfettamente ragione. il problema era proprio il log vuoto perchè uso logrotate   :Embarassed: 

mi resta comunque da chiarire il dubbio sul perchè l'oggetto ed i destinatari della mail siano sbagliati

----------

