歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix基礎知識 >> Sun Solaris上殺掉連接已經超時的進程腳本

Sun Solaris上殺掉連接已經超時的進程腳本

日期:2017/3/3 15:24:58   编辑:Unix基礎知識

今天遇到下面這個問題,在朋友們的幫助下終於成功了,在此表示感謝,同時把腳本貼出來

希望對大家有幫助,也希望朋友們可以優化這個腳本。

公司是做軟件開發的,程序員們的程序都要連接數據庫進行調試。可是他們的程序死了以後數據庫還是連接的,這樣一來系統的資源(內存)就會被占用被耗盡,於是我就

要經常去殺死已經死了的進程,可是這樣很麻煩,我想編一個shell腳本,可不知道如何下手,就請大蝦們幫幫忙了:-)

例如下面這些 323 325 。。。。。。。。。335 337 這些進程不能被殺,主要是要殺後面有(LOCAL=NO)的進程。 我應該怎麼做呀?

oracle 14527 1 0 10:22:39 ? 0:01 oraclextecs90 (LOCAL=NO)

oracle 16865 1 0 11:01:46 ? 0:06 oraclextecs90 (LOCAL=NO)

oracle 24346 1 0 00:00:52 ? 0:01 oraclextecs90 (LOCAL=NO)

oracle 24802 1 0 13:19:32 ? 0:03 oraclextecs90 (LOCAL=NO)

oracle 323 1 0 Apr 12 ? 0:01 ora_pmon_xtecs90

oracle 325 1 0 Apr 12 ? 1:35 ora_dbw0_xtecs90

oracle 327 1 0 Apr 12 ? 2:45 ora_lgwr_xtecs90

oracle 329 1 0 Apr 12 ? 2:45 ora_ckpt_xtecs90

oracle 331 1 0 Apr 12 ? 1:54 ora_smon_xtecs90

oracle 333 1 0 Apr 12 ? 0:00 ora_reco_xtecs90

oracle 335 1 0 Apr 12 ? 0:00 ora_s000_xtecs90

oracle 337 1 0 Apr 12 ? 0:00 ora_d000_xtecs90

oracle 14229 1 0 10:17:29 ? 0:00 oraclextecs90 (LOCAL=NO)

oracle 23079 1 0 22:58:31 ? 0:00 oraclextecs90 (LOCAL=NO)

oracle 1117 1 0 14:45:31 ? 0:47 oraclextecs90 (LOCAL=NO)

問題的補充:要殺連接已經超時了的進程(時間大於30分鐘),而不是要殺死所有的LOCAL=NO進程。

終於成功了!!!!!!!!!!!!!!!!!!

腳本如下:

ps -e -o pid -o etime -o args|grep LOCAL=NO>/tmp/tmpfile

cat /tmp/tmpfile|while read LINE

do

TIME=`echo $LINE|awk @#{print $2}@#`

TIME=`echo $TIME|awk -F: @#{print $1}@#`

if [ $TIME -gt 30 ]

then

echo $LINE >> /tmp/tmpflie2

fi

done

cut -c 1-5 /tmp/tmpfile2 |xargs -t -n1 kill -9

rm -f /tmp/tmpfile

rm -f /tmp/tmpfile2

然後把這個腳本寫進crontab,讓系統每30分鐘運行一次。

Copyright © Linux教程網 All Rights Reserved