Результат выполнения команды из командной строки розница с результатом из скрипта, кто нибудь может объяснить причину? (шел один и тот же /bin/bash)Скрипт:
-bash-3.00# cat ./audit_send.sh
#!/bin/bash
ps -ef | grep audit_send.sh | grep -v grep | wc -l
if (( $(ps -ef | grep audit_send.sh | grep -v grep | wc -l) > 1 )); then echo exit 1; exit 1; else echo not_exit; fiРезультат команды из командной строки:
-bash-3.00# if (( $(ps -ef | grep audit_send.sh | grep -v grep | wc -l) > 1 )); then echo exit 1; exit 1; else echo not_exit; fi
not_exitРезультат скрипта:
-bash-3.00# ./audit_send.sh
1
exit 1
-bash-3.00#
>[оверквотинг удален]
> Результат команды из командной строки:
> -bash-3.00# if (( $(ps -ef | grep audit_send.sh | grep -v grep
> | wc -l) > 1 )); then echo exit 1; exit
> 1; else echo not_exit; fi
> not_exit
> Результат скрипта:
> -bash-3.00# ./audit_send.sh
> 1
> exit 1
> -bash-3.00#А ничего, что сама суть этого куска -- проверить, или скрипт с именем audit_send.sh запущен?
Соответственно, если запускать эту команду не этим скриптом, а напрямую, то скрипт запущен не будет.
>[оверквотинг удален]
> Результат команды из командной строки:
> -bash-3.00# if (( $(ps -ef | grep audit_send.sh | grep -v grep
> | wc -l) > 1 )); then echo exit 1; exit
> 1; else echo not_exit; fi
> not_exit
> Результат скрипта:
> -bash-3.00# ./audit_send.sh
> 1
> exit 1
> -bash-3.00#В скрипте у тебя выполняются две команды, а из командной строки ты запускаешь всего одну.
>>[оверквотинг удален]
> В скрипте у тебя выполняются две команды, а из командной строки ты
> запускаешь всего одну.-bash-3.00# cat audit_send.sh
#!/bin/bash
#ps -ef | grep audit_send.sh | grep -v grep | wc -l
if (( `ps -ef | grep audit_send.sh | grep -v grep | wc -l` > 1 )); then echo exit 1; exit 1; else echo not_exit; fi-bash-3.00# ./audit_send.sh
exit 1
еще интересное наблюдение (что за фигня шелл то один использую):-bash-3.00# env | grep sh
SHELL=/usr/bin/bash
-bash-3.00# cat audit_send.sh
#!/usr/bin/bash
#ps -ef | grep audit_send.sh | grep -v grep | wc -l
if (( `ps -ef | grep audit_send.sh | grep -v grep | wc -l` > 1 )); then echo exit 1; exit 1; else echo not_exit; fi-bash-3.00# ./audit_send.sh
exit 1
-bash-3.00# cat audit_send.sh
#ps -ef | grep audit_send.sh | grep -v grep | wc -l
if (( `ps -ef | grep audit_send.sh | grep -v grep | wc -l` > 1 )); then echo exit 1; exit 1; else echo not_exit; fi-bash-3.00# ./audit_send.sh
not_exit
-bash-3.00# env
TERM=xterm
SHELL=/usr/bin/bash
SSH_CLIENT=192.168.37.92 49765 22
SSH_TTY=/dev/pts/5
USER=root
MAIL=/var/mail//root
PATH=/usr/sbin:/usr/bin
PWD=/root
LANG=C
TZ=<GMT+3>+3
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.22.22 49765 10.193.0.22 22
_=/usr/bin/env
-bash-3.00#
> Результат выполнения команды из командной строки розница с результатом из скрипта, кто
> нибудь может объяснить причину? (шел один и тот же /bin/bash)Вы проверяете наличие выполнения скрипта из него же, при вызове из командной строки вы не не запускаете этот скрипт.
> Вы проверяете наличие выполнения скрипта из него же, при вызове из командной
> строки вы не не запускаете этот скрипт.Когда я запускаю из командной строки он уже запущен, т.е. не имеет значения из командной строки запускаю или нет. Рабочий вариант скрипта создал.
Теперь возникает вопрос какого ... при проверке из скрипта ps -ом он показывает что их аж 2 шт. а при запуске из крона аж 3. Изменение скрипта с корректировкой внутри скрипта количества audit_send.sh не меняет количество предзапущенных скриптов при проверке командой: ps -ef | grep audit_send.sh | grep -v grep | wc -l
Скорректировал скрипт нижеследующим образом:
#!/bin/bash
#date
if [ ! -e ./pid ]; then mkdir ./pid; fi
if [ ! -f ./pid/audit_send.pid ]; then echo $$ > ./pid/audit_send.pid; fi
#nm=`ps -ef | grep audit_send.sh | grep -v grep | wc | awk {'print $1'}`
#echo $nm
#ps -ef | grep audit_send.sh | grep -v grepif [ `ps -ef | grep "$0" | grep -v grep | wc -l` -gt 3 ]; then exit 1; fi
while [ -f ./pid/audit_send.pid ]
do
sleep 1
done &
> Теперь возникает вопрос какого ... при проверке из скрипта ps -ом он
> показывает что их аж 2 шт. а при запуске из крона
> аж 3. Изменение скрипта с корректировкой внутри скрипта количества audit_send.sh не
> меняет количество предзапущенных скриптов при проверке командой: ps -ef | grep
> audit_send.sh | grep -v grep | wc -lточнее не такой командой: ps -ef | grep audit_send.sh | grep -v grep | wc -l
она может 1 показать, я из за этого не мог понять какое то время какое условие выставлять нужно в if, а хорошо показывает связка что audit_send.sh 2шт если запускать в скрипте:nm=`ps -ef | grep audit_send.sh | grep -v grep | wc | awk {'print $1'}`
echo $nmЯ стал так проверять вспомнив, что линуксовые конструкции типа:
for i in "parametr1 oarametr2 parametretc"; do ; done
в Соляре не работают.
> показывает что их аж 2 шт. а при запуске из крона
> аж 3.А в военное время значение Пи может достигать 4 !
>> показывает что их аж 2 шт. а при запуске из крона
>> аж 3.
> А в военное время значение Пи может достигать 4 !ПРОГРАММИСТЫ! ПОМИТЕ! Комп выполняет в точности то, что вы НАПИСАЛИ, а не то, чего вам от него ХОТЕЛОСЬ!