Shell-Script

創建自動空閒程序終止腳本

  • May 30, 2016

我想為空閒使用者佔用資源的一般問題的特定實例實施解決方案。我知道可以使用 檢索使用者列表,使用 檢索w關聯的 PID,使用 檢索ps最後一步kill。但是,我想為那些空閒了一個多小時的使用者自動化這個過程。

這個想法是逐行讀取 w 的輸出,選擇那些包含正則表達式的行[0-9]m(查找空閒時間大於 1:00m 的使用者)。然後,提取與該行關聯的 TTY 並將其發送到ps -t,其輸出包含要發送到的 PID 列表kill -9。我只是不確定如何將所有這些串在一起。

最後一個警告:與 root 使用者相關的任何內容都不會被解釋。

w 使用 tty 的訪問時間來確定某人有多空閒,這包含在 idletime() 中,它統計 tty 文件並從目前時間中減去它的 atime。pkill 可以使用終端作為過濾器來殺死程序。

那麼,你想殺死任何不是 root 並且空閒超過 5 分鐘的人嗎?

for t in `w -h | grep -v '^root' | awk '{print $2}'`; do find /dev/$t -amin +5 -exec pkill -t $t \; ; done

這裡發生了什麼:

  • 使用不帶標題的 w 查找所有使用者
  • 過濾掉根
  • 列印出第 2 列的 tty
  • 對於每一行,做一個查找測試訪問時間是否超過5分鐘
  • 如果是,則使用 pkill 殺死該終端上的所有程序

為此使用外殼超時可能會更好。對於 bash 將 TMOUT 變數導出為只讀

TMOUT=<seconds>; readonly TMOUT; export TMOUT

供 tcsh 使用

set -r autologout <seconds>

在 /etc/profile.d/ 的腳本中。達到上述超時的 shell 將終止。‘w’ 的輸出並不總是準確的(例如,它無法報告 x 個會話中的時間)。

如果您有使用者通過 ssh 登錄而不是使用 ClientAliveInterval(請參閱 sshd_config(5))。

引用自:https://unix.stackexchange.com/questions/244974