服务启动前检查挂载的 Bash 脚本

服务启动前检查挂载的 Bash 脚本

我需要在某些服务脚本顶部插入一个条件检查设备是否已安装

我对 bash 脚本不是很熟悉......

这是我第一次尝试写,但它不起作用。

### START CHECK
volume="/media/MyMountName"
if ! mount | grep "on ${volume} type" > /dev/null
then
    exit;
fi
### END CHECK

#... rest of the service script

这是我最喜欢的另一个解决方案:

### START CHECK
volume="/media/MyMountName"
delay=5

while ! mount | grep "on ${volume} type" > /dev/null
do
    sleep $delay
    if delay >= 60
    then
        exit;
    $delay = $dealy + 5
done
### END CHECK

#... rest of the service script

第二个应该尝试在放弃之前检查安装一分钟并退出而不运行该服务。

答案1

while ! mount | grep "on ${volume} type" > /dev/null; do
    sleep $delay
    if [ "$delay" -gt 60 ]; then
        exit
    fi
    delay=$((delay+5))
done

使用/proc/mounts

您可能会考虑使用而不是(这只是)/proc/mounts的输出。mount/etc/mtab

while ! grep " ${volume} " /proc/mounts &>/dev/null; do

答案2

你已经很接近了。怎么样:

### START CHECK
start_check_mtpt() { 
 local volume="$1"
 local delay=5
 local tries=$[ 60 / delay ]
 local mounted=0

 while [[ 0 = $mounted ]] && [[ $tries -ge 0 ]]; do
   if cut -d' ' -f2 /etc/mtab | grep -qF "${volume}" ; then
      mounted=1
      # optional: break
   else
    sleep $delay
    let tries=tries-1
   fi
 done
 [[ 1 = $mounted ]]
 return $?
}
### END CHECK

start_check "/media/MyMountName"

答案3

这个问题有几个答案。如果您想检查是否具体的设备是否已安装(即您的备份设备),那么您应该通过其 UUID 来检查它,您可以通过发出 来查找blkid

UUID="place the UUID here"
TRIES=0
DEVFILE=""

while [[ -z $DEVFILE ]] && [[ $TRIES -lt 5 ]]; do
   DEVFILE=$(blkid -U $UUID)
   TRIES=$(( $TRIES + 1 ))
   sleep 5
done

if [ $TRIES -lt 5 ]; then
   MOUNTPOINT=$(findmnt -f $DEVFILE | tail -n1 | cut -d" " -f1)
   echo "found your device at $MOUNTPOINT"
fi

相关内容