Для диагностики периодически возникающей неисправности в сети необходимо при определенном условии (падение ppp-линка) запустить одновременно несколько ping'ов, перенаправив их вывод в файлы, дождаться их завершения, склеить выходные файлы и отправить на мыло. Вопрос в том, как из шел скрипта запустить несколько [одновременно работающих] процессов и дождаться их завершения ?
спасибо.
>Для диагностики периодически возникающей неисправности в сети необходимо при определенном условии (падение
>ppp-линка) запустить одновременно несколько ping'ов, перенаправив их вывод в файлы, дождаться
>их завершения, склеить выходные файлы и отправить на мыло. Вопрос в
>том, как из шел скрипта запустить несколько [одновременно работающих] процессов и
>дождаться их завершения ?
>спасибо.А зачем так сложно? Есть fping
спасибо, то что нужно !
>Для диагностики периодически возникающей неисправности в сети необходимо при определенном условии (падение
>ppp-линка) запустить одновременно несколько ping'ов, перенаправив их вывод в файлы, дождаться
>их завершения, склеить выходные файлы и отправить на мыло. Вопрос в
>том, как из шел скрипта запустить несколько [одновременно работающих] процессов и
>дождаться их завершения ?
>спасибо.
for COUNT in `seq 3`
do
ping -c 3 ya.ru 2>&1 >ping.log$COUNT
donewhile [ -n `ps | grep ping | grep -v grep` ]
do
sleep 1
donecat ping.log* >PING.log
rm -f ping.log*
чисто из любопытства: а более элегантного способа, чем поллинг пинга в списке процессов нет ? не знаток юниксового программинга, но под WinAPI это было бы что-то вроде
handles[i] = CreateProcess(...);
WaitForMultiplyObjects(handles,...);
>чисто из любопытства: а более элегантного способа, чем поллинг пинга в списке
>процессов нет ? не знаток юниксового программинга, но под WinAPI это
>было бы что-то вроде
>handles[i] = CreateProcess(...);
>WaitForMultiplyObjects(handles,...);
>Вопрос в том, как из шел скрипта запустить несколькоШЕЛ СКРИПТА!!!
>ШЕЛ СКРИПТА!!!
ну так це все ж таки не редмондское поделие :) ради любви к искусству полез по манам, как оказалось все совсем не просто (а очень просто):ping -c 4 host1 > host1.log&
ping -c 4 host2 > host2.log&
ping -c 4 host3 > host3.log&
wait
>>ШЕЛ СКРИПТА!!!
>ну так це все ж таки не редмондское поделие :) ради любви
>к искусству полез по манам, как оказалось все совсем не просто
>(а очень просто):
>
>ping -c 4 host1 > host1.log&
>ping -c 4 host2 > host2.log&
>ping -c 4 host3 > host3.log&
>waitАга, а еще можно ждать определенный процесс:
ping -c 4 host1 > host1.log &
pid=$!
...
wait $pidну и т.д. В общем, всяких возможностей много. :)
>>ШЕЛ СКРИПТА!!!
>ну так це все ж таки не редмондское поделие :) ради любви
>к искусству полез по манам, как оказалось все совсем не просто
>(а очень просто):
>
>ping -c 4 host1 > host1.log&
>ping -c 4 host2 > host2.log&
>ping -c 4 host3 > host3.log&
>wait
Не знал про wait :). Действительно так намного лучше