¿Cómo matar todas las pantallas que ha estado más de 3 semanas?

Im que crea un script que estoy ejecutando cada noche en 03.00 que matará todas las pantallas que han estado funcionando más de 3 semanas.

Alguien hizo algo similar que puede ayudar? Si tienes un guión o sugerencia a un mejor método, por favor, ayuda publicando 🙂

Estaba pensando tal vez algo así.

Primero haga un volcado al file de text

ps -U nombre de usuario -ef | grep PANTALLA >> dump.txt

a continuación, hacer un bucle que pasa por todas las líneas de dump.txt con un regex y poner pid de los prosseses con STIME> 3weeksago en una matriz.

a continuación, hacer un bucle de matar en el resultado de la matriz.


editar: script añadido terminé con

este es el script que terminé con, im matando todas las pantallas que ha sido opend más de 30 días comprar el usuario 1002.

#!/bin/bash clear echo "Starting Screen cleanup script this will stop any screens older then 30 days"; echo "Starting in 5 seconds, press ctrl-c to cancel"; c=1 while [ $c -le 5 ] do echo "start $c " sleep 1 ((c++)) done first() { echo $1 } second() { echo $2 } third() { echo $3 } COUNT=0 ps -e -o "pid etime comm uid" | egrep '1002' | egrep 'screen' | while read PID ETIME COMM do case "$ETIME" in *:* ) DAYS=0 HOURS=0 MINUTES=0 SECONDS=0 case "$ETIME" in *-* ) X=`echo $ETIME | sed y/-/\ /` DAYS=`first $X` ETIME=`second $X` ;; * ) ;; esac X=`echo $ETIME | sed y/:/\ /` case "$ETIME" in *:*:* ) HOURS=`first $X` MINUTES=`second $X` SECONDS=`third $X` ;; *:* ) MINUTES=`first $X` SECONDS=`second $X` ;; *) ;; esac HOURS=`echo $HOURS + \( $DAYS \* 24 \) | bc` MINUTES=`echo $MINUTES + \( 60 \* $HOURS \) | bc` SECONDS=`echo $SECONDS + \( 60 \* $MINUTES \) | bc` if test "$SECONDS" -gt "2592000" then echo $PID $COMM echo "DIE-DIE-DIE--------------------->killing pid------>"$PID ((COUNT++)) kill -15 $PID echo $COUNT fi ;; * ) ;; esac done 

Para la shell usted puede build apagado de esto:

 ps -A -o etime,pid,cmd | while read etime pid rest; do if grep '^/usr/bin/screen' <(echo $rest) >/dev/null; then echo $etime $pid fi done 

Basta con analizar etime durante días mayores que x y matar el pid. Ver man ps para qué etime (time transcurrido es).

Esto supone Linux.

Tal vez este artículo de SO puede ayudarle, parece similar. Usted podría cambiar el regex para que coincida con sus 3 semanas.

killall puede matar processs por nombre y usuario.

    Intereting Posts