LINUX.ORG.RU

Демонизация скрипта


0

0

В общем есть скрипт

#!/bin/bash

PROCNAME="test.sh"

STARTPATH="/path/to/test.sh"

TIMEOUT=2

PROCGREP=`ps -A | grep $PROCNAME`

while [ -n $PROCNAME ]; do

if [ -z $PROCGREP ]; then

$STARTPATH

else

sleep $TIMEOUT

fi

done


Собственно вопрос, как заставить его работать в фоне?
Запуск типа ./script.sh &
работает нормально только до тех пор, пока я не закрою консоль с которой его запустил, при ее закрытии умирает.
Есть-ли способ запустить его так, что бы он не опрокидывался при закрытии консоли?
Запуск из screen не предлагать, ибо костыль.

Ответ на: комментарий от Davidov

> Далее обработка сигналов в bash

Т.е. команда trap.

gaa ★★
()
Ответ на: комментарий от dronozavr

>>> nohup ./script.sh &

> пасиба, помогло))

Это не настоящая "демонизация": у процесса остался терминал; группа, сессия и ppid остались оболочечные. Могут быть проблемы, например, если зашёл по ssh, то не выйдешь -- этот дурак будет ждать, пока все его порождения не закроют терминал.

Вот бронебойный способ, настояший демон получается:

setsid ./script.sh >/dev/null 2>&1 </dev/null

(перенаправления под башем показаны)

Die-Hard ★★★★★
()

Во FreeBSD есть команда daemon(8), под Linux мне всегда ее не хватало. Отвязывает от терминала, делает chdir("/"), stdout в /dev/null, умеет pidfile - сказка.

anonymous
()
Ответ на: комментарий от Davidov

> start-stop-daemon?

ЩИТО?

DAEMON(8)               FreeBSD System Manager’s Manual

NAME
     daemon — run detached from the controlling terminal

SYNOPSIS
     daemon [−cf] [−p pidfile] [−u user] command arguments ...

anonymous
()
Ответ на: комментарий от anonymous

>Нет, не это.

Вы сказали, что вам этого не хватало в линуксе. Я вам дал название утилиты, которая есть в любом debian-based дистрибутиве и позволяет делать то же самое.

И, кстати, есть ещё такая штука (если вам обязательно простая нужна): http://www.libslack.org/daemon/

Davidov ★★★★
()
Ответ на: комментарий от anonymous

> Во FreeBSD есть команда daemon(8), под Linux мне всегда ее не хватало.

apt-get install daemon

anonymous
()
Ответ на: комментарий от Davidov

> Я вам дал название утилиты, которая есть в любом debian-based дистрибутиве и позволяет делать то же самое.

> apt-get install daemon

Спасибо, но Linux я уже давно не использую.

anonymous
()
Ответ на: комментарий от anonymous

> Во FreeBSD есть команда daemon(8), под Linux мне всегда ее не хватало. Отвязывает от терминала, делает chdir("/"), stdout в /dev/null, умеет pidfile - сказка.

Ну, Линуксовая setsid(8) позволяет сделать всё это и более (в кооперации с командами оболочки), см. выше.

Но обе они -- не ПОЗИКСные.

Die-Hard ★★★★★
()

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

никогда такого не наблюдал. Вот такой скрипт работает без проблем: while true; do sleep 2; done.

> Могут быть проблемы, например, если зашёл по ssh, то не выйдешь -- этот дурак будет ждать, пока все его порождения не закроют терминал.

Никогда с этим не сталкивался. Щас проверил, не воспроизводится. Может, это не из-под bash делаете и проблема с какими-нить "альтернативными" оболочками?

> Но обе они -- не ПОЗИКСные.

позикс вообще вещь ограниченная :).

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.