检查扭矩作业是否正在运行/排队的脚本

时间:2015-09-16 02:28:23

标签: python bash scripting torque

有没有办法以编程方式检查是否有正在运行和/或排队的作业?我正在寻找一个脚本(可以是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

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

1 个答案:

答案 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