Portál AbcLinuxu, 9. května 2025 19:30

Dotaz: zastavovani starych procesu

18.2.2008 10:53 tomas
zastavovani starych procesu
Přečteno: 325×
Odpovědět | Admin
Dobry den, chtel bych napsat skript, ktery bude killovat procesy podle regularniho vyrazu bezici urcitou dobu (oracle procesy bezici dele nez 5 dni). Potreboval bych tedy pomoci ps nejak vybrat vsechny starsi procesy, pripadne pouzit jiny vhodnejsi nastroj. Poradite nekdo prosim?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

18.2.2008 12:58 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: zastavovani starych procesu
Odpovědět | | Sbalit | Link | Blokovat | Admin
A není lepší nastavit /etc/security/limits.conf položku CPU ?

Nebude to dělat vaši požadovanou činost ?

- cpu - max CPU time (MIN)
18.2.2008 13:23 tomas
Rozbalit Rozbalit vše Re: zastavovani starych procesu
Nevim co presne tento parametr upravuje - jestli se da nastavit i zastavovani jen vybranych procesu. V mem pripade je dulezity ten regularni vyraz, ostatni procesy bezet mohou.
18.2.2008 15:36 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: zastavovani starych procesu
man bash; hľadať ulimit
18.2.2008 16:08 petr
Rozbalit Rozbalit vše Re: zastavovani starych procesu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Já bych na to šel přes Oracle. A to sice tak, že bych "ukončil" všechny uživatele, kteří jsou k databázi připojeni déle jak určitý čas. To, co navrhujete -- tedy příkaz kill -- je neuvěřitelná nesystémová prasárna! Hezky ty uživatele ukončete správnou cestou! A nezapomeňte, že ten uživatel může být i připojení connection poolu, takže doba připojení dva roky může být plně v pořádku a ukončení takového spojení povede jen k dalšímu overheadu jak na straně databáze (tam hlavně), ale i na straně aplikačního serveru. Kamarádem Vám budiž dokumentace k systémovému pohledu V$SESSION a příkaz ALTER SYSTEM KILL SESSION .... Hodně štěstí!
18.2.2008 16:36 tomas
Rozbalit Rozbalit vše Re: zastavovani starych procesu
Jsem si vedom tvrdosti tohoto postupu. Bohuzel plsql procedura vzdy nezabira, proto je potreba sahnout k tomuto reseni. Nechci ukoncovat uzivatele, to si nemohu vzdy dovolit, potrebuju jen ukoncit ocividne visici a necinne procesy. Reseni problemu jsem uz nejspise nasel zde
18.2.2008 21:34 Jan Šimák | skóre: 37 | Hradec Králové
Rozbalit Rozbalit vše Re: zastavovani starych procesu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokusil jsem se vytvořit univerzální script, pro použití libovolného časového údaje.
použití je následující: ./script_name sleep 00010000
#!/bin/bash

# pro zasilani kill signalu odkomentovat radek "kill -9 ${PID[$run]}"
# $1 = regxp procesu
# $2 = max cas procesu ve tvaru DDHHMMSS
#set -x

ETIME=`ps -e -o etime= -o comm= | egrep "$1" | gawk '{print $1}'`

subscript=0
pid=`ps -e -o pid= -o comm= | egrep "$1" | gawk '{print $1}'`
for i in $pid; do
	PID[$subscript]="$i"
	subscript=$((subscript+1))
done

run=0
for i in $ETIME; do
	if [[ `echo "$i" | wc -m` == 6 ]]; then
		TIME="00`date --date="00:${i}" +'%H%M%S'`"
	elif [[ `echo "$i" | wc -m` == 9 ]]; then
		TIME="00`date --date="$i" +'%H%M%S'`"
	elif [[ `echo "$i" | wc -m` == 12 ]]; then
		DAY=`echo "$i" | gawk -F - '{print $1}'`
		time=`echo "$i" | gawk -F - '{print $2}'`
		TIME="${DAY}`date --date="$time" +'%H%M%S'`"
	fi
	if [[ "$TIME" > "$2" ]]; then
		echo $TIME
		echo ${PID[$run]}
#		kill -9 ${PID[$run]}
	fi

run=$((run+1))
done

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.