我正在尝试检查特定文件是否打开。我正在使用lsof,我正在使用bash shell。我编写了一个bash脚本来检查文件是否打开。但是,我面临着一个奇怪的问题。当我使用user a
从命令行运行脚本时,我得到了预期的结果。但是,当我使用user b
运行脚本时,我得到了不同的结果。
我需要将脚本从Talend Studio调用为user b
,因此我无法切换到user a
并执行脚本。该脚本对777
具有user b
权限,而user b
也是该脚本的所有者。下面是脚本。请帮忙。
#! /bin/bash
# declare STRING variable
FILENAME=$1
if [ "$FILENAME" == "" ]; then
echo "No file found..exiting"
exit
fi
#While loop to check if the file has been completely copied
while true; do
#$(lsof /mnt/disk1/$FILENAME | wc -l)
SZ=$(/usr/sbin/lsof <Path to file>/$FILENAME | wc -l)
if [ $SZ -gt 1 ]; then
echo "File $FILENAME is being copied in the Landing Zone"
sleep 10
else
echo "Copied $FILENAME................"
break
fi
done
我是否需要在sudoers中添加user b
?
答案 0 :(得分:0)
你使用“lsof”的目的只是验证$ FILENAME是否被打开,对吧? 所以我认为更好的方法是在打开$ FILENAME时创建一个标志文件,但不要使用“lsof”来验证,因为“lsof”是一种昂贵的方法。 例如:
在你的“着陆区”:
#!/bin/bash
FILENAME=/foo/foo1
if [ -f /tmp/filename.flag ] ; then
echo "the file is opened now ..."
else
touch /tmp/filename.flag
cp -arf $FILENAME /tmp/. # or use rsync to copy it
echo "file copy is done ..."
rm -rf /tmp/filename.flag
fi
而且,有时您可以“触摸/tmp/filename.flag”来停止此任务。