如何检查文件是否存在并执行命令?

时间:2009-03-21 18:01:01

标签: linux shell

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

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

命令是

python daemon.py restart

必须从特定目录执行。

7 个答案:

答案 0 :(得分:46)

[ -f /tmp/filename.pid ] || python daemon.py restart

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

[]执行测试并在成功时返回0,否则返回<{1}}

1是类似C的||,所以如果左边的命令失败,请执行右边的命令。

所以最后的声明说,如果or不存在,那么启动守护进程。

答案 1 :(得分:7)

如果是你想知道的bash脚本,那么这样的东西会起作用:

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

更好的选择可能是调查lockfile

答案 2 :(得分:6)

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

答案 3 :(得分:6)

test -f filename && daemon.py restart || echo "File doesn't exists"

答案 4 :(得分:2)

解决问题的另一种方法是确保守护程序“保持”活着的脚本......

这样的事情(注意:应该添加信号处理以便正确启动/关闭):

$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

通过这种方式,即使服务器意外死亡,服务器也会保持活跃状态​​。

答案 5 :(得分:1)

您还可以使用Monit等现成的解决方案。

答案 6 :(得分:1)

ls /tmp/filename.pid

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