自動アイドルプロセス終了スクリプトの生成

自動アイドルプロセス終了スクリプトの生成

アイドルユーザーがリソースを多用する一般的な問題の特定のインスタンスに対するソリューションを実装したいと思います。を使用してユーザーリストを検索し、wを使用して関連するPIDを検索しps、を使用して最後のステップを検索できることを知っていますkill。しかし、1時間以上アイドル状態のユーザーのためにこのプロセスを自動化したいと思います。

アイデアは、wの出力を1行ずつ読み、正規表現[0-9]m(アイドル時間が1分より長いユーザーを探す)を含む行を選択することです。その後、ラインに関連付けられたTTYが抽出されて送信されps -t、出力には送信されるPIDのリストが含まれますkill -9。私はそれをすべて1つにまとめる方法がわからない。

最終警告:rootユーザーに関する内容は解釈されません。

答え1

これを行うには、シェルタイムアウトを使用する方が良いかもしれません。 bash エクスポート TMOUT 変数の場合、読み取り専用

TMOUT=<seconds>; readonly TMOUT; export TMOUT

tcshで使用するため

set -r autologout <seconds>

/etc/profile.d/のスクリプトから。上記のタイムアウトに達したシェルは終了します。 「w」の出力は常に正確ではない(例:xセッションの時間を報告しない)。

sshを介してログインするユーザーがいる場合は、ClientAliveIntervalを使用してください(sshd_config(5)を参照)。

答え2

w は tty のアクセス時間を使用して、誰かがどれだけアイドル状態かを確認します。これは、ttyファイルの数を数え、現在時刻からatimeを減算するIdletime()で扱われます。 pkillはターミナルをフィルタとして使用してプロセスを終了できます。

では、ルートではなく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 を使用してその端末のすべてのプロセスを終了します。

関連情報