скрипты 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: