如何用shell脚本监视打开的文件并终止其PID?

如何用shell脚本监视打开的文件并终止其PID?

我的系统出现错误“打开的文件太多”。我调查了这个错误,结果发现/usr/bin/uwsgi创建的套接字(?) 超过 1020 个。如果创建的套接字超过 1020 个,我猜就会出现上述错误。

因此,我尝试运行一个 shell 脚本来监视打开文件的数量,如果超过 1000 个,则终止其 PID 以解决此阶段的错误。

#uwsgimonitor.sh
#!/bin/bash

#filename=/usr/bin/uwsgi

filename=/usr/bin/uwsgi
Cnt= lsof | awk '/uwsgi/ {print $1,$2}' | uniq -c | sort -r | head -1 | awk '{print $1}'
PROCESS_ID = lsof | awk '/uwsgi/ {print $1,$2}' | uniq -c | sort -r | head -1 | awk '{print $2}'

if [ $Cnt gt 1000 ]
then
    echo "Found the number of socket open exceeds $Cnt."
    kill -9 $PROCESS_ID
else
    echo "" #nothing to do.
fi

在 crontab 中,我添加了此行,但它似乎并没有杀死我想要的 PID。

* * * * * sh /home/root/scripts/uwsgimonitor.sh

我错过了什么?

先感谢您。

答案1

对于那些想知道我的情况如何的人。

#!/bin/bash


count=$(lsof | awk '/uwsgi/ {print $1,$2}' | uniq -c | sort -r | head -1 | awk '{print $1}')
PROCESS_ID=$(lsof | awk '/uwsgi/ {print $1,$2}' | uniq -c | sort -r | head -1 | awk '{print $2}')
expectLimit=1000

echo "open socket:$count"
echo "pid:$PROCESS_ID"

if [[ ${count} -gt ${expectLimit} ]]
then
        echo "Found uwsgi exceeds limit :${expectLimit}"
        kill -9 $PROCESS_ID
else
        echo "" #nothing to do.
fi

这个对我有用。谢谢。

相关内容