Я создаю сценарий, который я выполняю каждую ночь в 03.00, который убьет все экраны, работающие более 3 недель.
кто-нибудь делал что-нибудь подобное, что может помочь? Если у вас есть сценарий или предложение лучшего метода, помогите, разместив сообщение :)
Я подумал, может быть, что-то вроде этого.
Сначала сделайте дамп в текстовый файл
ps -U имя пользователя -ef | grep ЭКРАН >> dump.txt
затем выполните цикл, проходящий через все строки файла dump.txt с регулярным выражением, и поместите в массив pid всех строк с STIME> 3weeksago.
затем выполните цикл уничтожения для результата массива.
Это сценарий, с которым я закончил, я убил все экраны, которые были открыты более 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
Для оболочки вы можете построить из этого:
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
Просто проанализируйте etime для дней больше x и убейте pid. Видеть man ps
в какое время (прошедшее время).
Это предполагает Linux.
Может быть этот ТАК статья может вам помочь, похоже. Вы можете изменить регулярное выражение, чтобы оно соответствовало вашим 3 неделям.
killall
может убивать процессы по имени и пользователю.