#!/bin/sh # # killold # # Le tueur de vieux processus ( à mettre dans le cron.hourly ) # # Par Julien MOREAU ( jmoreau@bigfoot.com ) # # Création: jm 03/10/2000 # hmax=10 # Age maxi d'un processus (en heure) appli="" # Application à tuer (zéro ou une) # Si on s'en moque, laisser une chaine vide group2kill="^isty[12]$" # Groupe des processus pouvant etre tués # Ceci est une expression régulière (un grep est utilisé) nbps=0 # Nombre de paramètres souhaités (sans option) cmd=`basename $0` # Nom de la commande usage="Usage: $cmd [-h]" # Message d'aide usage=$usage"\n\tAffiche ce message d'aide.\n" usage=$usage"\nUsage: $cmd [ ...]" usage=$usage"\n\tTue les vieux processus utilisateurs." usage=$usage"\n\t(cette commande est à lancer en tant que root)." if test `uname` != "HP-UX" ; then e="-e" ; fi if [ $# -ne $nbps -o "$1" = "-h" ] ; then # Vérifie le nb de paramètres echo $e $usage 1>&2 ; exit 1 # Affichage aide puis arrêt fi export LANG=fr_FR.iso88591 ; export LC_CTYPE=french.iso88591 set 1 `date` ; shift ; time="$5" hnow=`echo $time|cut -d: -f1` echo "Current hour: $hnow" ps -fe | tail -n+2 | grep "$appli" | grep -v ^root | while read ligne do set 1 $ligne ; shift if [ $# -lt 8 ] ; then continue ; fi user=$1 ; pid=$2 ; ppid=$3 ; stime=$5 ; tty=$6 ; itime=$7 ; cmde=$8 h=`echo $stime|cut -d: -f1` # Heure à laquelle il a été lancé echo $h|grep -q [1-9] if [ $? -ne 0 ] ; then h=-100 ; fi age=`expr $hnow - $h` # Age en heure du processus if [ $? -ne 0 ] ; then age=1000 ; fi if [ $age -lt 0 ] ; then age=`expr $age + 24` ; fi passwdline=`grep ^$user /etc/passwd` #uid=`echo $passwdline|cut -d: -f3` gid=`echo $passwdline|cut -d: -f4` group=`grep :$gid: /etc/group|cut -d: -f1` echo $group | grep -q $group2kill ; group_ok=$? if [ $group_ok -eq 0 -a $age -ge $hmax ] ; then prog=`ps -u $1|grep $pid|cut -c23-` # Nom du programme echo $e "user=$user\tgroup=$group\t\c" echo $e "stime=$stime\tage=${age}h\tprog=$prog" if test `whoami` = root ; then kill -9 $pid ; fi fi done exit 0 # Sortie sans erreur