有没有办法以编程方式检查是否有正在运行和/或排队的作业?我正在寻找一个脚本(可以是Bash,Python或任何其他典型语言)来做这件事,然后在必要时采取一些行动,例如关闭服务器(或者在我的情况下,在Google Compute Engine中的一个实例) )。我还想检查在采取行动之前是否有其他用户登录。我知道命令qstat
,但不知道如何在脚本中使用它。命令who
也是如此。我使用的是Torque和Ubuntu Server。
谢谢。
修改
考虑到" down vote",我会尝试提供更多信息。我想在伪代码中执行以下操作:
if "no jobs queued" and "no jobs running" and "no users logged in" then
shutdown machine
endif
显然,缺少的部分是如何在脚本文件中检测引号内的条件。关机部分在这里并不重要。如果有人能给我一些指示或分享一些想法,我会很感激。感谢。
答案 0 :(得分:2)
import subprocess
def runCmd(exe):
p = subprocess.Popen(exe,stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
retcode = p.poll()
line = p.stdout.readline()
yield line
if retcode is not None:
break
def hasRQJob():
jobs = runCmd('qstat')
for line in jobs:
columns = line.split()
if columns[-2] in ('Q','R'): return True
return False
上面的示例演示了如何使用python执行shell脚本以及检查是否有作业正在运行或排队。函数runCmd
返回这样的作业信息:
Job id Name User Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
1773.cluster CC Jianhong.Zhou 00:00:00 C MasterStudents
1774.cluster RDPSO Wei.Fang 00:00:00 C PRCI
因此,很容易判断工作的状态。
检查是否有用户日志记录的方法可以引用4 Ways to Identify Who is Logged-In on Your Linux System
顺便说一下,在python中执行shell脚本的方法可以引用Calling an external command in Python