Иногда пользователи (или вы сами) забывают выйти с сервера, и сессия остается в статусе idle или stuck, занимая ресурсы, блокируя терминалы и даже мешая обновлениям. Хорошая новость: Bash + w + ps + timeout помогут автоматически завершать такие сессии.
❓ Что считать зависшей сессией?
📍 Бездействие более 30 минут;
📍 Нет активных процессов;
📍 Неиспользуемый TTY;
🛠 Скрипт для автоудаления "спящих" SSH-сессий
#!/bin/bash
# Время бездействия в минутах
IDLE_LIMIT=30
echo "[*] Поиск SSH-сессий, бездействующих более $IDLE_LIMIT минут..."
w -h | awk -v limit="$IDLE_LIMIT" '
{
idle=$5
if (idle ~ /:/) {
split(idle, t, ":")
minutes = t[1]*60 + t[2]
} else if (idle ~ /old/) {
minutes = 999
} else {
minutes = idle + 0
}
if (minutes >= limit) {
print $2 # TTY
}
}
' | while read tty; do
echo "[!] Завершение процессов на $tty"
pkill -KILL -t "$tty"
done
🌟 Как это работает
w -h- список всех интерактивных сессийawkпарсит IDLE-времяpkill -tзавершает процессы, связанные с TTY
❗️ Дополнительно:
📍 Добавь в исключения TTY root'а, CI/CD, сервисных пользователей;
📍 В проде лучше сначала логировать, потом - удалять;
BashTex 📱 #bash