Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Ирина_М Гость
|
Добавлено: Вт Окт 19 2004 20:33 Заголовок сообщения: Почему скрипт зависает, если запускать в фоновом режиме? |
|
|
Здравствуйте. Такая трабла.
Есть скрипт на си-шеле. Если обычным образом его запускать, то всё хорошо - выдаёт резалт и прекращает работу. Но нужно его запустить в фоновом. В этом случае он почему-то выдаёт, опять же, нужный результат, но висит... и чего-то ждёт..
Может быть кто-то знает причины, по которым это может быть.. сожалению, сам скрипт сейчас не могу привести - он на работе.. |
|
Вернуться к началу |
|
|
ryabinkin
Зарегистрирован: 01.12.2003 Сообщения: 152 Откуда: Moscow
|
Добавлено: Ср Окт 20 2004 09:17 Заголовок сообщения: |
|
|
Обычно такое происходит, если запустить в фоновый режим процесс, пишущий что-то на консоль.
Вы не указали ОС, но на Линуксе это происходит так
Всякий процесс, запущенный в фоне имеет ассоциацию файлового дескриптора 1 с устройством /dev/null. (а процесс переднего плана имеет ассоциацию этого дескриптора с текущей консолью, т.е. все, что он пишет в файловый дескриптор 1 отображается на консоли, тогда как вывод от фонового процесса прото сбрасывается). Т.е. все должно работать корректно, за исключением того, что Вы не увидите, что выводит процесс
Далее начинаются мои предположения.
Возможно, процесс что-то пытается вывести на стандартную консоль ошибок (файловый дескриптор 2). Тогда он получит сигнал (забыл какой ) и блокируется.
Вобщем, требуется больше информации. _________________ Из двух спорящих виноват тот, кто умнее. |
|
Вернуться к началу |
|
|
Ирина_М Гость
|
Добавлено: Ср Окт 20 2004 11:17 Заголовок сообщения: |
|
|
У меня стоит Фряха...
То, что происходит в фоновом режиме действительно выводится на экран..и результат верный..только потом висим... Сейчас попробовала... даже такой маленький скрипт подвисает:
#!/bin/csh
test -e test.pid
set a = $?
echo $a
if ($a != 0) then
echo "file ne exists"
( tail -f drwebd.log > log1 ) &
echo $! > test.pid #/var/tmp/test.pid
exit
endif
более того. виснет даже это:
#!/bin/csh
test -e test.pid
echo "file ne exists"
( tail -f drwebd.log > log1 ) &
echo $! > test.pid #/var/tmp/test.pid
exit |
|
Вернуться к началу |
|
|
ryabinkin
Зарегистрирован: 01.12.2003 Сообщения: 152 Откуда: Moscow
|
Добавлено: Ср Окт 20 2004 11:27 Заголовок сообщения: |
|
|
Попробуйте так
./ваш_скрипт > report 2>&1 &
так заработает? _________________ Из двух спорящих виноват тот, кто умнее. |
|
Вернуться к началу |
|
|
butcher
Зарегистрирован: 18.04.2003 Сообщения: 467 Откуда: Киров
|
Добавлено: Ср Окт 20 2004 11:29 Заголовок сообщения: |
|
|
Попробуйте перенаправить потоки вывода и ошибок в /dev/null или ещё куда.. _________________ Нет ничего невозможного... |
|
Вернуться к началу |
|
|
Ирина_М Гость
|
Добавлено: Ср Окт 20 2004 11:45 Заголовок сообщения: |
|
|
Работает так:
(./скрипт > report ) &
Если делать, как вы сказали, говорит mbigoud ... redirect.
о работае все равно не так. Он хоть и не виснет, но не убивает процессы, не удаляет файлы, которые должен.
"Попробуйте перенаправить потоки вывода и ошибок в /dev/null или ещё куда.."
Если б я знала, как это делать))) Я си шелл 3ий день изучаю(( |
|
Вернуться к началу |
|
|
Ирина_М Гость
|
Добавлено: Ср Окт 20 2004 11:49 Заголовок сообщения: |
|
|
Плюс, если его запускать посто в фоновом режиме, то он не убивает процессы, которые должен убивать... |
|
Вернуться к началу |
|
|
Ирина_М Гость
|
Добавлено: Ср Окт 20 2004 11:52 Заголовок сообщения: |
|
|
Вот привожу полный скрипт.. те скрипты, которые вызываются в нем, написаны на перле и работаю нормально и в фоновом и в обычном режимах. rwebd.log - тот файл постоянно пишется и увеличивается.
#!/bin/csh
test -e test.pid
set a = $?
echo $a
if ($a != 0) then
echo "file ne exists"
( tail -f drwebd.log > log1 ) &
echo $! > test.pid #/var/tmp/test.pid
exit
endif
if ( $a == 0 ) then
echo "file exists"
./timescript
set u = `cat timeofch`
set t = `date +%s`
set p = `expr $t - $u`
echo "raznitsa vo vremeni = $p"
if ( $p > 10 ) then
rm test.pid
( tail -f drwebd.log > log1 ) &
echo $! > test.pid #/var/tmp/test.pid
exit
endif
set b = `cat test.pid`
ps -ax | grep $b > test1.pid
set t = `cat test1.pid`
if ( "$t" == "" ) then
echo "process ne exists"
rm test.pid
( tail -f drwebd.log > log1 ) &
echo $! > test.pid #/var/tmp/test.pid
exit
endif
echo "process exists,timeOk"
kill `cat test.pid` #/var/tmp/test.pid`
cat log1 > log2
( tail -f drwebd.log > log1 ) &
echo $! > test.pid #/var/tmp/test.pid
./virusstat #name of virusstat script
endif |
|
Вернуться к началу |
|
|
Ирина_М Гость
|
Добавлено: Ср Окт 20 2004 11:59 Заголовок сообщения: |
|
|
Слушайте..Наверное, я совсем тормоз...
Действительно, если запускать так:
( ./script > 22 ) &
То вроде всё нормально заработало... Надеюсь, админа это устроит... |
|
Вернуться к началу |
|
|
ryabinkin
Зарегистрирован: 01.12.2003 Сообщения: 152 Откуда: Moscow
|
Добавлено: Ср Окт 20 2004 12:16 Заголовок сообщения: |
|
|
Хорошо, что работает.
Я, если честно, не люблю csh
уж лучше стандартный sh
или даже bash _________________ Из двух спорящих виноват тот, кто умнее. |
|
Вернуться к началу |
|
|
Ирина_М Гость
|
Добавлено: Ср Окт 20 2004 12:41 Заголовок сообщения: |
|
|
Спасибо за помощь...
Только теперь мне надо сделать, чтобы после выполнения всего этого, на экран выдавался кусок файла..Опять же, если делаю просто катом, то всё виснет... Уже пытаюсь вспомнить, как запустить файл с помощью перла... |
|
Вернуться к началу |
|
|
Ирина_М Гость
|
Добавлено: Ср Окт 20 2004 13:04 Заголовок сообщения: |
|
|
Еще нужен хелп!!)))
Пишу опять же, что после скрипта мне надо всё вывести на монитор.. делаю так:
cat ... > &1
так этот урод создает мне файл с именем 1 и туда всё кидает((( |
|
Вернуться к началу |
|
|
butcher
Зарегистрирован: 18.04.2003 Сообщения: 467 Откуда: Киров
|
Добавлено: Чт Окт 21 2004 07:50 Заголовок сообщения: |
|
|
а что, просто cat имя_файла уже отменили?
Вообще, какой смысл перенаправлять вывод в файл и уходить в фон, если после завершения необходимо выводить результ? _________________ Нет ничего невозможного... |
|
Вернуться к началу |
|
|
Ирина_М Гость
|
Добавлено: Чт Окт 21 2004 14:51 Заголовок сообщения: |
|
|
butcher , ответ в теме моей следующей..называется Еще нужен хелп)) |
|
Вернуться к началу |
|
|
|