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

Dav*_*idM 22 linux shell

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

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

命令是

python daemon.py restart
Run Code Online (Sandbox Code Playgroud)

必须从特定目录执行.

edu*_*ffy 53

[ -f /tmp/filename.pid ] || python daemon.py restart
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


Bri*_*edt 7

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

if [ ! -f "$FILENAME" ]; then
   python daemon.py restart
fi
Run Code Online (Sandbox Code Playgroud)

更好的选择可能是查看lockfile


Dou*_*der 6

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


har*_*eyD 6

test -f filename && daemon.py restart || echo "File doesn't exists"
Run Code Online (Sandbox Code Playgroud)


gah*_*ooa 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
Run Code Online (Sandbox Code Playgroud)

这样,服务器即使意外死掉,也会保持存活状态。