URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 93614
[ Назад ]

Исходное сообщение
"Помогите разобраться с Bash и Ctrl+C"

Отправлено MakPol , 29-Июл-12 22:39 
Доброго времени суток!

На днях писал очередной скрипт автоматизации на bash и столкнулся с забавной штукой - скрипт, который верой и правдой работал на Ubuntu 10.04 перестал корректно отрабатывать на Cent OS 6.2 и 6.3, а также воспроизвел ситуацию на Fedora 16. В общем вот что надо для воспроизведения:

/etc/init.d/testsh

#! /bin/bash
#
# testsh       Test bash
#
case "$1" in
  start)
/tmp/starttestscript.sh &
        ;;
  stop)
        
        ;;
  status)
        ;;
  restart|reload|force-reload)
        $0 stop
        $0 start
        rc=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
        exit 2
esac

exit $rc

/tmp/sarttestscript.sh

#! /bin/bash - скрипт запуска проекта (когда запускается система, она пишет log-файл, тут я искуственно такой log-файл создал.
tcpdump >> /tmp/testfile.log

/tmp/sborkatestscript.sh - скрипт запуска процесса сборки проекта, запуска системы и вывод лога запуска на экран.

#! /bin/bash
/etc/init.d/testsh start
tail -f /tmp/testfile.log

Так вот, мой порядок действий:
1. Запускаю скрипт /tmp/sborkatestscript.sh и на экране у меня начинает бежать лог.
2. В это время смотрю работает ли моя "служба" при помощи ps -f -C tcpdump --no-headers
мне выводится что-то в роде:
# ps -f -C tcpdump --no-headers
tcpdump   5804  5802  5 15:27 pts/2    00:00:00 tcpdump
3. Как только я "насмотрелся лога" после запуска системы я выхожу из tail -f при помощи Сtrl+С
4. Далее хочу проверить ка там "служба" и вот что получаю
# ps -f -C tcpdump --no-headers
#
т.е. такого демона получается не запущено.

Не могу понять почему так происходит. Ведь запуск был от другого скрипта, да и как я понимаю ctrl+C должен повлиять то был только на прекращение tail.
Если посмотреть в pstree, то ИМХО не должно убивать запущенный процесс
        ├─konsole─┬─bash
        │         ├─bash───su───bash───sborkatestscrip───tail
        │         ├─bash───su───bash───pstree
        │         ├─bash───su───bash
        │         └─{konsole}
        ├─starttestscript───tcpdump
        
Ну и самое главное, на Ubuntu то у меня точно таой же скрипт работал.
Помогите пожалуйста разобраться как быть, мне надо работать именно по воспроизведенной на простых скриптах схеме и именно через tail.

Заранее большое спасибо!


Содержание

Сообщения в этом обсуждении
"Помогите разобраться с Bash и Ctrl+C"
Отправлено Анонимус_нелогиниус , 30-Июл-12 12:29 
Очень сложно. Я вообще ничего не понял.

"Помогите разобраться с Bash и Ctrl+C"
Отправлено ze6ra , 30-Июл-12 13:13 
>[оверквотинг удален]
> мне выводится что-то в роде:
> # ps -f -C tcpdump --no-headers
> tcpdump   5804  5802  5 15:27 pts/2  
>  00:00:00 tcpdump
> 3. Как только я "насмотрелся лога" после запуска системы я выхожу из
> tail -f при помощи Сtrl+С
> 4. Далее хочу проверить ка там "служба" и вот что получаю
> # ps -f -C tcpdump --no-headers
> #
> т.е. такого демона получается не запущено.

По Ctrl-C закрываете tail, за ним завершается
скрипт с tailf который был лидером группы процессов запущенных из него. Когда завершается лидер то закрываются все остальные процессы в группе. Запускайте скрипт запуск вашего демона через  команду утилиту setsid которая отвяжет его от лидера группы и создаст новую группу для него.