Gnu-Screen
如何殺死所有已啟動超過 3 週的螢幕?
我正在創建一個腳本,我每晚 03.00 都會執行該腳本,該腳本將殺死所有執行時間超過 3 週的螢幕。
有人做過類似的事情可以提供幫助嗎?如果您有更好的方法的腳本或建議,請通過發布提供幫助:)
我在想也許是這樣的。
首先轉儲到文本文件
ps -U 使用者名 -ef | grep 螢幕 >> dump.txt
然後使用正則表達式循環執行 dump.txt 的所有行,並將 STIME > 3weeksago 的 prosses 的 pid 放入數組中。
然後對數組結果執行終止循環。
編輯:添加了我最終得到的腳本
這是我最終得到的腳本,我殺死了所有打開時間超過 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,您可以以此為基礎:
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
只需解析大於 x 天的 etime 並終止 pid。查看
man ps
什麼是 etime(經過的時間)。這假設 Linux。
也許這篇SO 文章可以幫助你,看起來很相似。您可以更改正則表達式以匹配您的 3 週。