我有一个使用Python编写的守护进程。当它运行时,它有一个位于/tmp/filename.pid的PID文件。如果守护程序未运行,则PID文件不存在。
在Linux上,如何检查以确保PID文件存在,如果不存在,请执行命令重新启动它?
命令是
python daemon.py restart
必须从特定目录执行。
答案 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。