linux – 如何检测init.d脚本中是否存在挂载点?

重启后,我正在使用init.d脚本从已挂载的网络共享(autofs)执行应用程序.脚本在尝试执行命令之前等待30秒,以等待网络/挂载点启动.

在执行命令之前,我想以某种方式检测到网络确定已启动且安装已明确安装.

您对如何使用此脚本实现此目的(在CentOS 6.4中)的建议是什么?

这就是我现在拥有的:

#!/bin/bash
#
# chkconfig: 3 95 5
# description: My app
# processname: my-app
#

# Sleep for 30 seconds before attempting to execute command
sleep 30s

# Get function from functions library
. /etc/init.d/functions

# Start the service my-app from autofs mount
start() {
        echo -n "Starting my-app: "
        /share/path/my-app --log /tmp/log.log --supersede
        ### Create the lock file ###
        touch /var/lock/subsys/my-app
        success $"my-app startup"
        echo
}
# Restart the service my-app
stop() {
        echo -n "Stopping my-app: "
        killproc my-app
        ### Now,delete the lock file ###
        rm -f /var/lock/subsys/my-app
        echo
}
### main logic ###
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status my-app
        ;;
  restart|reload|condrestart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|reload|status}"
        exit 1
esac
exit 0

解决方法

init脚本按S ##数字定义的顺序启动.较新版本的Unix(至少在Linux上)并行启动相同的##数字(虽然您可以关闭功能…)所有必须使用的##位于网络和fsmount编号之后.然后它应该工作.但是,如果fsmount在后台启动,最简单的可能是探测已安装驱动器上的文件.像这样的东西:
while ! test -f /mnt/over-there/this/file/here
do
    sleep 1
done

这将等到文件出现.如果还没有,请睡一会儿然后再试一次.

为避免某人创建您在本地计算机上测试的文件的潜在问题,您可能希望使用mountpoint命令行,如:

while ! mountpoint -q /mnt/over-there
do
    sleep 1
done

(来自下面的评论.)-q是使命令安静.

—更新:30次尝试后超时

在shell脚本中,您还可以计算和测试数字:

count=0
while ! test -f /mnt/over-there/this/file/here
do
    sleep 1
    count=`expr $count + 1`
    if test $count -eq 30
    then
        echo "timed out!"
        exit 1
    fi
done

如果计数达到30(30秒的睡眠加上检查文件是否可用所需的时间),这将停止,之后它会输出错误消息“timed out!”.

—更新:如果你要切换到systemd

使用systemd,Unit section支持

ConditionPathIsMountPoint=/mnt/over-there

它与上面的脚本完全相同,没有超时.此语句阻止在装入存在之前启动命令.

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...