如何杀死所有已经超过3周的屏幕?

我创build了一个脚本,我正在执行每天晚上03.00,将杀死所有已经运行了3个星期以上的屏幕

任何人做了类似的事情可以帮助吗? 如果你有一个更好的方法脚本或build议,请帮助张贴:)

我在想也许是这样的。

首先做一个转储到文本文件

ps -U用户名-ef | grep SCREEN >> dump.txt

然后使用正则expression式在dump.txt的所有行上执行一个循环,并将STIME> 3weeksago的pros函数放在一个数组中。

然后对数组结果执行一个kill循环。


编辑:添加脚本我结束了

这是我结束了剧本,即时通讯杀死已经开放的所有屏幕比30天购买用户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 

对于shell你可以build立这个:

 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 

只要parsing出etime大于x天并杀死pid。 (时间已过),请参阅man ps

这假定Linux。

也许这个 SO文章可以帮助你,似乎相似。 你可以改变正则expression式来匹配你的3周。

killall可以通过名称和用户来killall进程。