【问题标题】:Script to Check if Torque Jobs are Running/Queued [closed]检查扭矩作业是否正在运行/排队的脚本[关闭]
【发布时间】:2015-09-16 02:28:23
【问题描述】:

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

谢谢。

编辑

鉴于“反对票”,我将尝试提供更多信息。我想在伪代码中执行以下操作:

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

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

【问题讨论】:

    标签: python bash scripting torque


    【解决方案1】:
    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

    【讨论】:

    • 非常感谢!这就是我一直在寻找的。我可以使用类似 subprocess.check_output("who") 的东西来检查是否有用户登录。
    • @Paul 是的,你是对的。谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 2022-12-14
    • 2015-02-22
    • 2019-03-10
    • 2010-10-21
    • 1970-01-01
    相关资源
    最近更新 更多