代码之家  ›  专栏  ›  技术社区  ›  davidmytton

如何检查文件是否存在,如果不存在,如何执行命令?

  •  18
  • davidmytton  · 技术社区  · 15 年前

    我有一个使用python编写的守护进程。当它运行时,它有一个pid文件位于/tmp/filename.pid。如果守护进程没有运行,则pid文件不存在。

    在Linux上,如何检查以确保PID文件存在,如果不存在,则执行命令以重新启动它?

    命令是

    python daemon.py restart
    

    必须从特定目录执行。

    7 回复  |  直到 5 年前
        1
  •  43
  •   John Feminella    15 年前
    [ -f /tmp/filename.pid ] || python daemon.py restart
    

    -f 检查给定路径是否存在并且是常规文件(仅 -e 检查路径是否存在)

    这个 [] 执行测试并返回 0 关于成功, 1 否则

    这个 || 是类似C的 or 如果左边的命令失败,执行右边的命令。

    所以最后的声明说,如果 /tmp/filename.pid 不存在,然后启动守护程序。

        2
  •  7
  •   Brimstedt    9 年前

    如果您想知道的是bash脚本,那么这样的脚本可以工作:

    if [ ! -f "$FILENAME" ]; then
       python daemon.py restart
    fi
    

    一个更好的选择可能是调查 lockfile

        3
  •  6
  •   Douglas Leeder    15 年前

    其他的答案可以用来检测文件的存在。但是,对于完整的解决方案,您可能应该检查pid文件中的pid是否仍在运行,以及它是否是您的程序。

        4
  •  6
  •   Messa    7 年前
    test -f filename && daemon.py restart || echo "File doesn't exists"
    
        5
  •  1
  •   Anonymous    15 年前

    您也可以使用现成的解决方案,如 Monit .

        6
  •  1
  •   KBIIX    10 年前
    ls /tmp/filename.pid
    

    如果文件存在,则返回true。如果文件不存在,则返回false。

        7
  •  1
  •   gahooa    5 年前

    解决这个问题的另一种方法是使用一个脚本来确保您的守护进程“保持”活动…

    类似这样的情况(注意:为了正确启动/关闭,应添加信号处理):

    $PIDFILE = "/path/to/pidfile"
    
    if [ -f "$PIDFILE" ]; then
        echo "Pid file exists!"
        exit 1
    fi
    
    while true; do
        # Write it's own pid file
        python your-server.py ;
    
        # force removal of pid in case of unexpected death.
        rm -f $PIDFILE;
    
        # sleep for 2 seconds
        sleep 2;
    
    done
    

    这样,即使服务器意外死亡,它也将保持活动状态。