繁体   English   中英

如何检查 Python 脚本是否已经在运行

[英]How to check if Python script is already running

我在 Ubuntu 上有 python 脚本,有时运行超过 24 小时。 我已经设置了 cron,每天运行这个脚本。 但是,如果脚本仍在运行,我想终止此脚本的新实例。 我已经找到了一些解决方案,但它们似乎很复杂。 我想在脚本的开头添加几行,这将检查脚本是否正在运行,如果是则返回,否则继续。

我喜欢这个命令:

pgrep -a python | grep 'script.py'

有可能为这个问题做出一些聪明的解决方案吗?

没有简单的方法可以做到这一点。 如评论中所述,您可以使用创建一些锁定文件。 但我更喜欢使用 sockets。 不确定它在 Linux 上是否同样有效,但在 Windows 上我使用这个:

import socket

class AppMutex:
    """
    Class serves as single instance mutex handler (My application can be run only once).
    It use OS default property where single UDP port can be bind only once at time.
    """

    @staticmethod
    def enable():
        """
        By calling this you bind UDP connection on specified port.
        If binding fails then port is already opened from somewhere else.
        """

        try:
            AppMutex.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # UDP
            AppMutex.sock.bind(("127.0.0.1", 40000))
        except OSError:
            raise Exception("Application can be run only once.")

脚本开头的简单调用:

AppMutex.enable()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM