0

監視したいサーバーが8台あります。すべてのサーバーには、tornadopythonサーバーがインストールされています。サーバーの1つは、他のサーバーをポーリングし、問題が発生した場合にSMSで警告するモニターです。

アラートの1つは、ユーザーがサーバーの1つにログインしたときです。

Pythonを使用してUbuntuサーバーにログインしているユーザーを検出するにはどうすればよいですか?ログインしたユーザーをメインモニターに戻す必要があります。これで物事が明確になることを願っています。

4

5 に答える 5

12

私がオンラインで見つけた最高のものはですpsutilpsutilのドキュメントを参照してください

最初にpsutilをインストールします。

pip install psutil

その後、ターミナルからpython consoleを実行する例として、すべてが簡単です。

import psutil 

psutil.users()

出力:

[user(name='root', terminal='pts/0', host='your-local-host-from-isp.net',
started=1358152704.0)]
于 2013-01-14T13:10:29.970 に答える
6

subprocessモジュールを使用して、コマンドを実行しwhoます。

In [5]: import subprocess

In [6]: subprocess.check_output("who")
Out[6]: 'monty    pts/0        2013-01-14 16:21 (:0.0)\n'

who | wc -l::を使用して、現在のログイン数を取得できます。

In [42]: !who
monty    pts/2        2013-01-14 19:09 (:0.0)
monty    pts/0        2013-01-14 19:07 (:0.0)

In [43]: p=Popen(["who"],stdout=PIPE)

In [44]: Popen(["wc","-l"],stdin=p.stdout).communicate()[0]
2

ユーザーの名前:

In [54]: users=check_output("who")

In [55]: set([x.split()[0] for x in users.splitlines()])
Out[55]: set(['monty'])
于 2013-01-14T13:13:33.810 に答える
2
from subprocess import Popen, PIPE, STDOUT

who = Popen(['who'],stdin=PIPE, stdout=PIPE, stderr=STDOUT)
print who.stdout.read()

# Output 
>>> sudo_O  :0           2013-01-14 11:48 (:0)
>>> sudo_O  pts/0        2013-01-14 11:48 (:0)
>>> sudo_O  pts/1        2013-01-14 12:41 (:0)
>>> sudo_O  pts/2        2013-01-14 12:42 (:0)
于 2013-01-14T13:13:02.343 に答える
0

また、サードパーティのソフトウェアをインストールしたくない場合。あなたはいつでもunixwhoユーティリティを実行することができます

import os
os.popen('who').read()
于 2013-01-14T13:14:35.000 に答える
-1
In [1]: import subprocess
In [2]: print subprocess.check_output("who").split()[0]
Out[3]: 'rikatee'
于 2013-01-14T13:42:12.660 に答える