URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 83054
[ Назад ]

Исходное сообщение
"ldapsearch и  AD"

Отправлено artemrts , 26-Ноя-08 10:53 

Доброго дня!.

Командой ldapsearch делаю выборку smtp адресов пользователей (через cron):

/usr/local/bin/ldapsearch -h 192.168.1.1 -p 389 -P 3 -D 'cn=ldap,ou=ldap,dc=domain,dc=ua' -w 'Bigsecret123' -b 'dc=domain,dc=ua' '(&(proxyAddresses=smtp:*)(|(objectClass=user)(objectClass=group)))' proxyAddresses> /usr/local/etc/ldapquery

Работает нормально, результат скидывается в файл ldapquery. Но вот проблема, если сервер недоступен по какой-то причине, то файл, естественно, после выполнения команды пустой.
Помогите написать скриптик, что бы в случае ошибки запроса, результат не записывался в файл.
  


Содержание

Сообщения в этом обсуждении
"ldapsearch и  AD"
Отправлено tux2002 , 26-Ноя-08 11:20 
>[оверквотинг удален]
> Командой ldapsearch делаю выборку smtp адресов пользователей (через cron):
>
> /usr/local/bin/ldapsearch -h 192.168.1.1 -p 389 -P 3 -D 'cn=ldap,ou=ldap,dc=domain,dc=ua' -w 'Bigsecret123' -b 'dc=domain,dc=ua' '(&(proxyAddresses=smtp:*)(|(objectClass=user)(objectClass=group)))' proxyAddresses> /usr/local/etc/ldapquery
>
> Работает нормально, результат скидывается в файл ldapquery. Но вот проблема, если
>сервер недоступен по какой-то причине, то файл, естественно, после выполнения команды
>пустой.
> Помогите написать скриптик, что бы в случае ошибки запроса, результат не
>записывался в файл.
>

......>/usr/local/etc/ldapquery.tmp
if [ $? == 0 ]
then
  cat /usr/local/etc/ldapquery.tmp > /usr/local/etc/ldapquery
fi


"ldapsearch и  AD"
Отправлено artemrts , 26-Ноя-08 11:33 
>[оверквотинг удален]
>>пустой.
>> Помогите написать скриптик, что бы в случае ошибки запроса, результат не
>>записывался в файл.
>>
>
>......>/usr/local/etc/ldapquery.tmp
>if [ $? == 0 ]
>then
>  cat /usr/local/etc/ldapquery.tmp > /usr/local/etc/ldapquery
>fi

    Не понял первую строчку. Понятно что ldapquery.tmp -  временный файл, а как его определить??


"ldapsearch и  AD"
Отправлено artemrts , 26-Ноя-08 11:46 
>[оверквотинг удален]
>>>
>>
>>......>/usr/local/etc/ldapquery.tmp
>>if [ $? == 0 ]
>>then
>>  cat /usr/local/etc/ldapquery.tmp > /usr/local/etc/ldapquery
>>fi
>
>    Не понял первую строчку. Понятно что ldapquery.tmp -
> временный файл, а как его определить??

С этим разобрался, но после запуска скрипта пишет ошибку

[0==0]: not found
Press any key to continue...

В файле ldapquery.tmp есть результат, но в ldapquery не копируется.


"ldapsearch и  AD"
Отправлено tux2002 , 26-Ноя-08 11:57 
>[оверквотинг удален]
>>
>>    Не понял первую строчку. Понятно что ldapquery.tmp -
>> временный файл, а как его определить??
>
>С этим разобрался, но после запуска скрипта пишет ошибку
>
>[0==0]: not found
>Press any key to continue...
>
>В файле ldapquery.tmp есть результат, но в ldapquery не копируется.

if <пробел> [ <пробел> $?<пробел> ==<пробел> 0 <пробел>]


"ldapsearch и  AD"
Отправлено artemrts , 26-Ноя-08 12:07 
>[оверквотинг удален]
>>> временный файл, а как его определить??
>>
>>С этим разобрался, но после запуска скрипта пишет ошибку
>>
>>[0==0]: not found
>>Press any key to continue...
>>
>>В файле ldapquery.tmp есть результат, но в ldapquery не копируется.
>
>if <пробел> [ <пробел> $?<пробел> ==<пробел> 0 <пробел>]

Вот скрипт

#!/bin/sh
/usr/local/bin/ldapsearch -h 192.168.1.1 -p 389 -P 3 -D 'cn=ldap,ou=ldap,dc=domain,dc=ua' -w 'Bigsecret123' -b 'dc=domain,dc=ua' '(&(proxyAddresses=smtp:*)(|(objectClass=user)(objectClass=group)))' proxyAddresses> /usr/local/etc/ldapquery > /usr/local/etc/ldapquery.tmp

if [ $? == 0 ]
then cat /usr/local/etc/ldapquery.tmp > /usr/local/etc/ldapquery
fi

Ошибка

[: 0: unexpected operator

В чем проблема? Что я не так делаю?



"ldapsearch и  AD"
Отправлено tux2002 , 26-Ноя-08 12:28 
#!/bin/sh

/usr/local/bin/ldapsearch -h 192.168.1.1 -p 389 -P 3 -D
'cn=ldap,ou=ldap,dc=domain,dc=ua' -w 'Bigsecret123' -b 'dc=domain,dc=ua'
'(&(proxyAddresses=smtp:*)(|(objectClass=user)(objectClass=group)))' proxyAddresses > /usr/local/etc/ldapquery.tmp

if [ $? == 0 ]
then cat /usr/local/etc/ldapquery.tmp > /usr/local/etc/ldapquery
else
echo "Error......"
exit 1
fi


"ldapsearch и  AD"
Отправлено tux2002 , 26-Ноя-08 12:35 
Если не получится попробуйте == заменить на -eq

"ldapsearch и  AD"
Отправлено artemrts , 26-Ноя-08 12:31 
>[оверквотинг удален]
>
>if [ $? == 0 ]
>then cat /usr/local/etc/ldapquery.tmp > /usr/local/etc/ldapquery
>fi
>
>Ошибка
>
>[: 0: unexpected operator
>
>В чем проблема? Что я не так делаю?

Фсем спасибо, проблема решена.

if [ -s /usr/local/etc/ldapquery.tmp ]
then cat /usr/local/etc/ldapquery.tmp > /usr/local/etc/ldapquery
fi


"ldapsearch и  AD"
Отправлено tux2002 , 26-Ноя-08 12:39 
>>)(|(objectClass=user)(objectClass=group)))' proxyAddresses> /usr/local/etc/ldapquery > >>/usr/local/etc/ldapquery.tmp

/usr/local/etc/ldapquery уберите.


"ldapsearch и  AD"
Отправлено tux2002 , 26-Ноя-08 12:43 
Лучше ориентироваться на статус завершения команды.
Здесь прокатит, другая команда напишет что-нибудь в файл.



"ldapsearch и  AD"
Отправлено artemrts , 26-Ноя-08 13:35 
>Лучше ориентироваться на статус завершения команды.
>Здесь прокатит, другая команда напишет что-нибудь в файл.

Да. Я с вами согласен. Но ошибка всеравно

if [ $? == 0 ]
then cat /usr/local/etc/ldapquery.tmp > /usr/local/etc/ldapquery
else
echo "Error......"
exit 1
fi


[: 0: unexpected operator
Error ...

И хоть ты тресни:-)).

P.S.: Спасибо за помощь!


"ldapsearch и  AD"
Отправлено artemrts , 26-Ноя-08 13:38 
>[оверквотинг удален]
>exit 1
>fi
>
>
>[: 0: unexpected operator
>Error ...
>
>И хоть ты тресни:-)).
>
>P.S.: Спасибо за помощь!

Блин.! Работает. Я написал 2 знака равно. Нада один-же)).



"ldapsearch и  AD"
Отправлено tux2002 , 26-Ноя-08 15:21 
>[оверквотинг удален]
>>
>>
>>[: 0: unexpected operator
>>Error ...
>>
>>И хоть ты тресни:-)).
>>
>>P.S.: Спасибо за помощь!
>
>Блин.! Работает. Я написал 2 знака равно. Нада один-же)).

Мда man bash и man test несколько отличаются насчёт "=".
PS у меня работало ==. В man test
       STRING1 = STRING2
              the strings are equal

       STRING1 != STRING2
              the strings are not equal

      INTEGER1 -eq INTEGER2
              INTEGER1 is equal to INTEGER2