Помощь сценария оболочки - PullRequest
0 голосов
/ 26 сентября 2011

Мне нужна помощь с двумя сценариями, которые я пытаюсь сделать как один. Есть два разных способа определить наличие проблем с неправильным монтированием NFS. Во-первых, если есть проблема, выполнение df будет зависать, а другое - df, но есть другие проблемы с монтированием, которые find (mount name) -type -d перехватит.

Я пытаюсь объединить сценарии, чтобы поймать обе проблемы, где он запускает find type -d, и, если есть проблема, вернуть ошибку. Если возникает вторая проблема NFS и происходит зависание команды find, убейте команду find через 2 секунды; запустите вторую часть скрипта и, если возникнет проблема с NFS, верните ошибку. Если проблема с NFS не возникает, верните OK.

MOUNTS="egrep -v '(^#)' /etc/fstab | grep nfs | awk '{print $2}'"
MOUNT_EXCLUDE=()
if [[ -z "${NFSdir}" ]] ; then
    echo "Please define a mount point to be checked"
    exit 3
fi

if [[ ! -d "${NFSdir}" ]] ; then
    echo "NFS CRITICAL: mount point ${NFSdir} status: stale"
    exit 2
fi


cat > "/tmp/.nfs" << EOF
#!/bin/sh
cd \$1 || { exit 2; }
exit 0;
EOF

chmod +x /tmp/.nfs

for i in ${NFSdir}; do
    CHECK="ps -ef | grep "/tmp/.nfs $i" | grep -v grep | wc -l"
    if [ $CHECK -gt 0 ]; then
        echo "NFS CRITICAL : Stale NFS mount point $i"
        exit $STATE_CRITICAL;
    else
        echo "NFS OK : NFS mount point $i status: healthy"
        exit $STATE_OK;
    fi
done

1 Ответ

1 голос
/ 26 сентября 2011

Строки MOUNTS и MOUNT_EXCLUDE несущественны для этого сценария, как показано.

Вы не четко определили, где устанавливается ${NFSdir}.

Первая часть сценария предполагает ${NFSdir} содержит одно значение каталога;вторая часть (цикл) предполагает, что она может содержать несколько значений.Возможно, это не имеет значения, поскольку цикл безоговорочно завершает работу скрипта на первой итерации, но это не совсем понятный и чистый способ его написания.

Вы создаете скрипт /tmp/.nfs, но:

  1. Вы не выполняете его.
  2. Вы не удаляете его.
  3. Вы не допускаете одновременное выполнение нескольких сценариев, выполняя отдельные процессы.имя файла (например, /tmp/.nfs.$$).
  4. Непонятно, почему вы скрываете скрипт в каталоге /tmp с префиксом . к имени.Это, вероятно, не очень хорошая идея.

Использование:

tmpcmd=${TMPDIR:-/tmp}/nfs.$$
trap "rm -f $tmpcmd; exit 1" 0 1 2 3 13 15

...rest of script - modified to use the generated script...

rm -f $tmpcmd
trap 0

Это дает вам максимальный шанс очистить временный скрипт.

Естьdf не осталось в сценарии, тогда как вопрос подразумевает, что он должен быть.Вам также следует взглянуть на команду timeout (хотя команды зависают, потому что NFS не отвечает, как правило, очень трудно убить).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...