我想編寫一個程序,將ssh寫入遠程框,並在遠程計算機沒有被主動使用的情況下在那裏運行作業。我將以clusterJobRunner @ remoteBox的身份登錄,另一個用戶將以someLocalUser @ remoteBox的身份登錄。如何確定某人是否正在Python或Java中使用Linux計算機?
有沒有辦法查看遠程用戶是否正在使用Python或Java使用該框?
我想編寫一個程序,將ssh寫入遠程框,並在遠程計算機沒有被主動使用的情況下在那裏運行作業。我將以clusterJobRunner @ remoteBox的身份登錄,另一個用戶將以someLocalUser @ remoteBox的身份登錄。如何確定某人是否正在Python或Java中使用Linux計算機?
有沒有辦法查看遠程用戶是否正在使用Python或Java使用該框?
我認爲「積極使用」的部分是棘手的部分。
如果足以檢查另一個用戶是否已登錄,則可以使用命令w
和who
以及可能的last
和lastlog
。所有這些命令都可以在手冊中查找幾個參數。
從Java/Python中,您可以執行這些命令並解析其輸出。
另一方面:工具w
和who
使用文件utmp
來獲取他們的信息。快速谷歌沒有爲Java發起任何事情,但對於Python我找到了庫pyutmp,你可以用它直接讀取utmp
文件,而不需要解析命令輸出。
用戶是否登錄並進入午餐(可能鎖定屏幕)是另一回事。
在Java中,您可以使用Runtime.exec()
執行users
Linux命令,獲取標準輸出並將其置於可解析的String
中。我不認爲有任何操作系統無關的方法來做到這一點。
如果目的是爲了避免打擾一些本地用戶,您可以考慮以較低的優先級運行您的工作。請參閱nice的文檔。
+1表示「很好」,儘管它不是萬能的 - 較低優先級的進程可能仍然支持I/O或內存,同時對CPU很有禮貌。 – 2012-07-16 19:45:07
是的,這是一個漂亮的I/O和內存密集型過程 – 2012-07-16 19:56:43
我第二個答案是@Eero Aaltonen - 你應該在nice
下運行你的東西。 Linux計算機可以在100%CPU繁忙時運行,但如果額外的任務全部在nice
以下,則對用戶來說感覺良好且快速;當主用戶的任務空閒時,調度程序將僅運行nice
任務。
但是,如果您想弄清楚機器是否正在使用,我建議您查看w
命令。在您的提示下嘗試man w
。 w
命令輸出機器的負載平均值,以及用戶列表和他們已經使用了多少時間(組合時間包括他們正在運行的任何後臺任務,加上他們主要任務的時間)。
建立SSH連接後,聽起來就像是'ps'和'grep'的工作。 – Corbin 2012-07-16 18:12:58
如果用戶在'screen'中運行某些東西會怎麼樣? – 2012-07-16 18:16:18