1

我正在尝试创建一个 bash 脚本来检查安装是否到位,如果没有,则将信息记录到文件以及发送通知。我在编写脚本方面非常新手,所以一些来龙去脉对我来说是难以捉摸的。

因为我们正在编写这个脚本来监控一个非常挑剔的软件,所以我希望尽可能多地在线执行,而不是创建配置文件或其他什么,因为我知道如果有任何更改作为供应商的设置会说这是所有问题的原因。以下是我到目前为止提出的代码。我承认我并不完全相信代码中的任何东西都会起作用,所以如果你看到我犯的任何明显错误,我很想知道它们。

#!/bin/bash
LOGFILE="/tmp/logs/mount.log
TIMESTAMP=`date "+%Y-%m-%d %H:%M:%S"`

while sleep 10m;
do
    status=$(for mnt in /reachengine /reachdata/mongo /reachbkups /mnt/AsperaShares /mnt/Editing /mnt/VOD-World/Movies_in_ProRes51_Archive /mnt/Production /mnt/ReachEngine /mnt/ITBackup /mnt/reach '/mnt/Ready for Air' '/mnt/Ready for Reach'; do mountpoint -q "$mnt" || echo "$TIMESTAMP $mnt missing"; done)
    [ "$status" ] && echo "$status" >> $LOGFILE
    [ "$status" ] && echo "$status" | mail -s "Missing mount" ####@###.##
done
4

1 回答 1

1
#!/bin/bash

logfile="/tmp/logs/mount.log"               # add 1 quote
timestamp=$( date "+%Y-%m-%d %H:%M:%S" )
mounts=(
    /reachengine 
    /reachdata/mongo 
    /reachbkups 
    /mnt/AsperaShares 
    /mnt/Editing 
    /mnt/VOD-World/Movies_in_ProRes51_Archive 
    /mnt/Production 
    /mnt/ReachEngine 
    /mnt/ITBackup 
    /mnt/reach 
    '/mnt/Ready for Air' 
    '/mnt/Ready for Reach'
)

while sleep 10m; do
    status=$(
        for mnt in ${mounts[@]}; do 
            mountpoint -q "$mnt" || echo "$timestamp $mnt missing"
        done
    )
    if [ "$status" ]; then
        echo "$status" >> $logfile
        echo "$status" | mail -s "Missing mount" ####@###.##
    fi
done 

建议:

  • 更正日志文件上的关闭双引号=
  • 小写变量
  • $( )而是反引号
  • 阵列扫描支架,更易于维护
  • 更好的缩进

只是快速阅读,而不是测试
拿你喜欢的东西

于 2018-04-05T20:46:51.833 回答