inotify в сценарии удара не работает с командой ldapadd

Если Ваша среда больше, чем 1 500 машин, комплект Microsoft System Center продуктов мог бы быть правильным для Вас. Если Вы - Партнер Microsoft, это - экономически эффективная опция для меньшей компании. Но если Вы на самом деле покупаете лицензию отдельно, у Вас должно быть много машин для управления, прежде чем Вы получите любой достойный ROI.

2
задан 23 August 2013 в 10:43
1 ответ

Если rm выполняется из этого сценария, то с вашей логикой все в порядке.

Вероятно, это проблема времени, когда файл создается в каталоге, но не заполняется при запуске вашего сценария команда ldap. Попробуйте добавить cat файла, чтобы увидеть его. Затем попробуйте дождаться события close_write в каталоге вместо этого, чтобы получить полностью заполненный файл. Этого также может быть недостаточно, поскольку это зависит от того, как вы пишете в файл. Как правило, самый безопасный способ - создать временный файл в другом месте, а затем переместить его на место после полного заполнения, поскольку это более атомарная операция файловой системы.

Также неплохо было бы добавить проверку ошибок для ожидаемых файлов или команд:

#!/usr/bin/env bash

dir="/home/myuser/newldif/"
file="user.ldif.tmp"
ldf="$dir/$file"

while inotifywait -e close_write "$dir"; do

  # Check if the file we want exists in the directory being monitored. 
  if [ ! -f $ldf ]; then 
    echo "No file [$ldf]"; 
    continue;
  fi

  # Add users via ldap
  echo "Adding users:"
  mv $ldf $dir/user.ldif
  ldapadd -w "ldappassword" -D "cn=Manager,dc=mydomain,dc=com" -f $dir/user.ldif || echo "failed adding users" && exit 1

  # Remove file when done
  echo "Removing file"
  rm $dir/user.ldif || echo "failed removing file" && exit 1
done
1
ответ дан 3 December 2019 в 12:58

Теги

Похожие вопросы