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

euoag5mw  于 2023-03-29  发布在  Linux
关注(0)|答案(7)|浏览(244)

我有一个我用Python写的守护进程。当它运行时,它有一个位于/tmp/filename.pid的PID文件。如果守护进程没有运行,那么PID文件就不存在。
在Linux上,如何检查以确保PID文件存在,如果不存在,则执行命令重新启动它?
命令将为

python daemon.py restart

其必须从特定目录执行。

pb3skfrl

pb3skfrl1#

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

-f检查给定的路径是否存在并且是一个常规文件(仅-e检查路径是否存在)
[]执行测试并在成功时返回0,否则返回1
||是一个类C的or,所以如果左边的命令失败,执行右边的命令。
所以最后一条语句说,如果/tmp/filename.pid不存在,那么就启动守护进程。

93ze6v8z

93ze6v8z2#

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

omvjsjqw3#

如果你想知道的是bash脚本,像这样的东西可以工作:

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

更好的选择可能是查看lockfile

q43xntqr

q43xntqr4#

其他的答案对于检测文件的存在都很好,但是对于一个完整的解决方案,你可能需要检查pidfile中的PID是否还在运行,以及它是否是你的程序。

f8rj6qna

f8rj6qna5#

解决这个问题的另一种方法是一个脚本,它可以确保您的守护进程“保持”活动状态...
类似这样的东西(注:应添加信号处理,以便正确启动/关闭):

$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

通过这种方式,即使服务器意外死亡,它也将保持活动状态。

gijlo24d

gijlo24d6#

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

o7jaxewo

o7jaxewo7#

ls /tmp/filename.pid

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

相关问题