[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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



такая задачка:

есть скрипт А не мной писаный, который написан на 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 чего почитать чтобы решить проблему?



Reply to: