检查 Torque 作业是否 Running/Queued 的脚本

Script to Check if Torque Jobs are Running/Queued

有没有办法以编程方式检查是否有 运行 and/or 个排队的作业?我正在寻找一个脚本(可以是 Bash、Python 或任何其他典型语言)来执行此操作,然后在必要时采取一些操作,例如关闭服务器(或者在我的情况下, Google Compute Engine 中的一个实例)。我还想在采取行动之前检查是否有其他用户登录。我知道命令 qstat,但不确定如何在脚本中使用它。命令 who 也是如此。我正在使用 Torque 和 Ubuntu 服务器。

谢谢。

编辑

考虑到 "down votes",我将尝试提供更多信息。我想在伪代码中做类似下面的事情:

if "no jobs queued" and "no jobs running" and "no users logged in" then
    shutdown machine
endif

显然,缺少的部分是如何在脚本文件中检测引号内的条件。关闭部分在这里并不重要。如果有人能给我一些指示或分享一些想法,我将不胜感激。谢谢

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 return 职位信息是这样的:

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