Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    killare processi vecchi

    Ciao ragazzi,
    avrei bisogno di killare n processi del tipo:

    ...
    postgres 6331 0.0 0.0 21456 2320 ? S 14:43 0:00 postgres: nomeutente nomedatabase 62.149.206.XXX idle
    postgres 6331 0.0 0.0 21456 2320 ? S 14:44 0:00 postgres: nomeutente nomedatabase 62.149.206.XXX idle
    postgres 6331 0.0 0.0 21456 2320 ? S 14:45 0:00 postgres: nomeutente nomedatabase 62.149.206.XXX idle
    postgres 6331 0.0 0.0 21456 2320 ? S 14:46 0:00 postgres: nomeutente nomedatabase 62.149.206.XXX idle
    postgres 6331 0.0 0.0 21456 2320 ? S 14:47 0:00 postgres: nomeutente nomedatabase 62.149.206.XXX idle
    ...

    in base al più vecchio.

    Le parole chiave nel processo dovrebbero essere nomeutente e postgres.

    Lanciando un comando del tipo:

    killa 4 nomeutente

    la shell dovrebbe generare il seguente risultato ( lanciando ps aux ):

    ...
    postgres 6331 0.0 0.0 21456 2320 ? S 14:47 0:00 postgres: nomeutente nomedatabase 62.149.206.XXX idle
    ...

    Chi mi aiuta a realizzare la cosa?


  2. #2
    Qualcosa di simile sembra fare questo script:

    #!/bin/bash
    # Days ago
    DAYS="3"
    PROCS="eggdrop|psybnc"

    # Old date
    AGO=$(date --date="$DAYS days ago" +"%b %d")

    # Get pids
    PIDS=$(ps eaxo bsdstart,cmd,pid | egrep "^$AGO"' | egrep "$PROCS" | awk '{ print $4}')

    # Now kill em
    echo "Killing $PROCS process created $AGO days ago..."
    kill -9 $PIDS

    Ma andrebbe modificato.

  3. #3
    Pensavo ad una soluzione del genere...(qualora a qualcuno servisse ).
    L'ho creata di getto, appena sono a casa controllo che non ci siano errori. Come logica secondo me ci sono.

    Consigli?

    if [ $1 = "" ] then;
    echo "Specificare username";
    exit 1;
    fi
    if [ $2 = "" ] then;
    echo "Specificare processi da lasciare attivi.";
    exit 1;
    fi

    ps eaxo bsdstart,cmd,pid | grep "$1" | grep "postgres" | awk '{ print $4}' > kill_processo.tmp

    cp kill_processo.tmp _kill_processo.tmp

    NUMERO_RIGHE=`wc -l _kill_processo.tmp | awk '{ print $1 }'`

    NUMERO_RIGHE=`expr $NUMERO_RIGHE + -$2`

    X=1
    while [ $X -le $NUMERO_RIGHE ]
    do
    PID=`head -n 1 _kill_processo.tmp`

    kill $PID

    NUMERO_RIGHE_TMP=`wc -l _kill_processo.tmp | awk '{ print $1 }'`

    RIGHE_ERASE=`expr $NUMERO_RIGHE_TMP + -1`

    tail -n $RIGHE_ERASE _kill_processo.tmp > _kill_processo.tmp2
    cp _kill_processo.tmp2 _kill_processo.tmp

    X=`expr $X + 1`
    done

    rm -f _kill_processo.tmp
    rm -f _kill_processo.tmp2

  4. #4
    Teoricamente i PID sono assegnati in ordine progressivo, quindi ti dovrebbe bastare ordinare crescentemente la lista dei processi con sort...
    NeapoliX GNU/Linux
    "Alla maggior parte della gente piace leggere la propria scrittura e annusare l'odore dei propri peti." (Auden)

  5. #5
    Io farei cosi`

    codice:
      1 #!/bin/bash
      2 
      3 utente=""; processo=""; active=0;
      4 while [ $# -gt 0 ];
      5 do
      6     case "$1" in
      7         -a)
      8             active=$2
      9             shift;
     10         ;;
     11         -u)
     12             utente=$2
     13             shift;
     14         ;;
     15         -p)
     16             processo=$2
     17             shift;
     18         ;;
     19         -h|-*)
     20             echo "usage: $0 -u [utente] -p [processo] -a [attivi]"
     21             exit 1;
     22         ;;
     23     esac
     24     shift;
     25 done
     26 
     27 line=`ps -u $utente -U $utente u | grep $processo | grep -v "grep" | grep -v $0 | awk '{print $2}' | sort -n | wc -l`
     28 tokill=`echo "${line}-${active}" | bc`
     29 kill -9 `ps -u $utente -U $utente u | grep $processo | grep -v "grep" | grep -v $0 | awk '{print $2}' | sort -n | head -n $tokill`
    ti apre 7 xclock
    for i in `seq 1 7`; do xclock &; sleep 5; done

    uccide i primi 5 e ne lascia attivi 2
    ./killolder -u $USER -p xclock -a 2
    Are you alive?
    No, but I was written with LOVE. A new scripting language.
    www.frequenze.it

  6. #6
    Ciao ragazzi,
    ho debuggato lo script ed ora funziona molto bene.

    Lo posto qualora serva a qualcuno:

    Codice PHP:
    if [ "$1" "" ]; then
     
    echo "Specificare username"
     
    exit 1
    fi
    if [ "$2" "" ]; then
     
    echo "Specificare processi da lasciare attivi."
     
    exit 1
    fi

    echo "---> Output ps aux"
    ps aux grep "$1" grep "postgres" grep "idle"
    ps aux grep "$1" grep "postgres" grep "idle" awk '{ print $2}'  kill_processo.tmp

    cp kill_processo
    .tmp _kill_processo.tmp

    NUMERO_RIGHE
    =`wc -l _kill_processo.tmp | awk '{ print $1 }'`

    NUMERO_RIGHE=`expr $NUMERO_RIGHE + -$2`

    echo 
    "---> Cancellare $NUMERO_RIGHE processi."

    X=1
    while [ $X -le $NUMERO_RIGHE ]
    do
       
    PID=`head -n 1 _kill_processo.tmp`

       echo 
    "kill $PID"
       
    kill $PID

       NUMERO_RIGHE_TMP
    =`wc -l _kill_processo.tmp | awk '{ print $1 }'`

       
    RIGHE_ERASE=`expr $NUMERO_RIGHE_TMP + -1`
       
       
    tail -n $RIGHE_ERASE _kill_processo.tmp _kill_processo.tmp2 
       cp  _kill_processo
    .tmp2 _kill_processo.tmp 
     
       X
    =`expr $X + 1`
    done

    rm 
    -f _kill_processo.tmp
    rm 
    -f _kill_processo.tmp2 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.