我有一个脚本,每 30 分钟运行一次,检查 /mnt/controlurg 是否已挂载。如果没有,它会尝试挂载它并从中获取一些文件(它是 Windows 驱动器)。在 12.04 之前我没有遇到问题,但现在当脚本无法挂载(出于任何原因)远程驱动器时,挂载命令不会结束并保持为后台进程。更糟糕的是,每 30 分钟就会创建一个新的僵尸后台挂载进程,并且 CPU 平均负载越来越高(现在是 44%!!)。
检查正在运行的进程我得到多个类似的条目:
root 29458 29420 0 08:35 ? 00:00:00 mount /mnt/controlurg
root 29459 29458 0 08:35 ? 00:00:00 /sbin/mount.cifs //controlurg/c$ /mnt/controlurg -o rw,noauto,user=root,passwd=example,utf8
- 我怎样才能终止该进程?“kill -9 29459”不起作用。
- 为什么这些进程不会超时?我如何才能自动终止这些失败的挂载?
/opt/scripts/sftpcont.shl 中有趣的片段:
cat $SCRIPT/computers.dat | while read line
do
echo `date "+%Y/%m/%d %H:%M:%S"` ": Copying to ${line} with samba"
isalive=`ping -q -c1 $line| grep "1 received" |wc -l`
if [ $isalive!= "0" ]
then
mount /mnt/$line
rm /mnt/$linea/contingenciasap/*
cp $SCRIPT/fitxers/sapfitcrip.zip /mnt/$line/contingenciasap
umount /mnt/$line
fi
done
谢谢
答案1
如果你能展示一下你的脚本就太好了。但无论如何,你必须使用 exit 命令,例如:
mount <partition> /mnt/controlurg || exit 1
此命令只会停止运行脚本。您可以显示一些消息(或写入日志文件),例如:
mount <partition> /mnt/controlurg || eval 'echo "Error mounting partition" 1>&2; exit 1'
mount <partition> /mnt/controlurg || eval 'echo "Error mounting partition\n" >> mount.log; exit 1'
要终止所有进程,请使用killall
命令。