скрипты bash/sh kill, trap

2005-10-08 Пенетрантность Dmitry E. Oboukhov
такая задачка:

есть скрипт А не мной писаный, который написан на perl, который
коннектится к определенному хосту и что-то там делает

пока у этого скрипта есть сязь он работает в цикле в своем,
внутреннем... если связи нет, то он просто заканчивает работу...


далее, хочу приделать к нему обертку чтобы если связь пропала он раз в
10 минут перезапускался, сую его в такой вот скрипт:

#!/bin/sh

while /bin/true; do
A $*
sleep 600
done

и вроде все ок, пока руками запускаешь
но теперь всплывают подробности: т.к. скрипт пускается на сервере через
веб-интерфейс, то веб-морда которая его пускает делает следующее:
1. вывод (1,2) переназначает в файл-лог
2. ввод тоже переназначает /dev/null
3. делает setsid, cd, два форка
в общем делает из этого скрипта демона

через веб-морду же данный скрипт и киляется (она PID'у нужному SIGTERM
посылает)

так вот какая трабла вылезла:
когда работаешь в терминале и скрипт пускаешь через вышеописанную
обертку, то нажатием ctrl^C и обертка и скрипт останавливаются
а когда работает в режиме демона, то kill -SIGTERM обертке киляет
собственно обертку, а скрипт продолжает себе работать.

думал я как в срипт-обертку прикрутить trap чтобы отловить -SIGTERM и
кильнуть дочерний скрипт, но что-то ничего не придумалось :(

$! ведь только для асинхронно запущенных команд работает
а какой PID имеет команда, запущенная обычно - хез

короче куда и чего поглядеть, man чего почитать чтобы решить проблему?


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: скрипты bash/sh kill, trap

2005-10-08 Пенетрантность Alexander Lourier
В сообщении от Суббота 08 Октябрь 2005 12:29 Dmitry E. Oboukhov написал(a):

 есть скрипт А не мной писаный, который написан на perl, который
 коннектится к определенному хосту и что-то там делает
 пока у этого скрипта есть сязь он работает в цикле в своем,
 внутреннем... если связи нет, то он просто заканчивает работу...

[skip]

 думал я как в срипт-обертку прикрутить trap чтобы отловить -SIGTERM и
 кильнуть дочерний скрипт, но что-то ничего не придумалось :(

В подробности задачи не вникал, зачем такое нагромождение, не понял. Отвечу 
только на конкретные вопросы.

Сигналы в bash можно перехватывать встроенной командой trap:
trap команда SIGTERM

 $! ведь только для асинхронно запущенных команд работает
 а какой PID имеет команда, запущенная обычно - хез

Можно запустить дочерний процесс через , и ждать его завершения встроенной 
командой wait.

A $* 
apid=$!
trap kill $apid SIGTERM
wait $apid

-- 
Best regards, Alexander Lourier. http://aml.rulezz.ru