информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Портрет посетителяВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / sysadmin
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
Во супер ! 12.07.02 18:54  Число просмотров: 886
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
Программа пишит всегда (перенаправленна в файл или нет) на tty1. Почему именно на tty1 не понятно. Нравится ей наверно :)

> Xmm...
> Ты stdout и stderr часом не закрываешь в своей программе ?
> Она демон ?

Не, не закрываю и не демон. Обычная прога.
<sysadmin>
Как запустить прогу в автозапуске ? 11.07.02 18:21  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
Под линухом необходимо что бы прога запускалась сама при старте ОС. Но, необходимо что бы в проге на ./ выдавалась именно её директория (а не директория ссылки), и имя программы было её (если запускать из rc.d по ссылке, argv[0] будет именем ссылки, что для меня не подходит).
Так же необходимо что бы программа запускалась всегда, не зависимо от уровня загрузки.
Линухи SuSe 6, RH 7
man inittab ? 11.07.02 18:47  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
не стоит так... 12.07.02 11:21  
Автор: Night Knight [HZTeam.msk] <George Fedosejev> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Зачем такое извращение? Это не unixway. Запуску этой проги самое место в rc.local, что в SuSE, что в RedHat.

Для SuSE в /etc/init.d/ лежит sceleton, который очень легко руками правится под собственные нужды. Как вариант можно использовать для этой проги chroot. Вставить готовый скрипт запуска в нужные runlevels в СуСЕ очень легко с помощью insserv.

man chroot, man insserv.

Не знаю, есть ли в шапке insserv, но готовые скрипты при небольшой правке легко перекинуть с СуСИ в шапку.
не стоит так... 12.07.02 16:29  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> Зачем такое извращение? Это не unixway.

Это вопрос религии :)))

>Запуску этой проги
> самое место в rc.local, что в SuSE, что в RedHat.
>
> Для SuSE в /etc/init.d/ лежит sceleton, который очень
> легко руками правится под собственные нужды. Как вариант
> можно использовать для этой проги chroot. Вставить готовый
> скрипт запуска в нужные runlevels в СуСЕ очень легко с
> помощью insserv.
>
> man chroot, man insserv.
>
> Не знаю, есть ли в шапке insserv, но готовые скрипты при
> небольшой правке легко перекинуть с СуСИ в шапку.

Проблема в том что человеку нужен запуск программы независимо от уровня загрузки ...

PS: Я кстати всегда складываю что то левое действительно в rc.local
??????? 11.07.02 19:12  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
x:5:boot:/root/path/my_pog

reboot

ps -A

There isnt my_pog !!! Has not started :(
??????? 12.07.02 10:36  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> x:5:boot:/root/path/my_pog
>
> reboot
>
> ps -A
>
> There isnt my_pog !!! Has not started :(

Xmm...
xxx:::boot:/bin/pwd
пашет на ура ... может чего с программой ?
Ладно, запустить то я его запустил... 12.07.02 16:26  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
а что толку ? Консоли то под него нет. А лог в файл я не предусмотрел (переписывать лениво !).
В inittab >mylog не напишишь.
Создал командный файл, поместил его в директории с экзешником.
#!sh
/..../my_pog >mylog
в inittab запускаю командный файл, НО my_log создается в корне ! В /
Что за фигня ? Почему вкорне, а не в /etc ?
К тому же my_log пуст. Пусть хотя первая команда проги - это printf. Прога работает, и работает давно, всегда по нормальному запускалась.
И еще, если лог создался в корне, то при попытки открыть файл в программе fopen( "./somefile" ); где он его искать будет ? Тоже в корне ?
Ладно, запустить то я его запустил... 12.07.02 16:41  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> а что толку ? Консоли то под него нет.

здрасте ...
а /dev/console это что

> А лог в файл я не
> предусмотрел (переписывать лениво !).
> В inittab >mylog не напишишь.
> Создал командный файл, поместил его в директории с
> экзешником.
> #!sh
> /..../my_pog >mylog
сделай ка вот так:

/../my_prog 1> /.../out.log 2> /../err.log


шоб разобраться с диагностикой ...

> в inittab запускаю командный файл, НО my_log создается в
> корне ! В /

ну дык все правильно ...
pwd у тебя /

> Что за фигня ? Почему вкорне, а не в /etc ?

в скрипте можно поствить cd /etc но ImHO в таких случаях указывают полный путь ...

> К тому же my_log пуст. Пусть хотя первая команда проги -
> это printf. Прога работает, и работает давно, всегда по
> нормальному запускалась.
> И еще, если лог создался в корне, то при попытки открыть
> файл в программе fopen( "./somefile" ); где он его искать
> будет ? Тоже в корне ?

Да - твоя прога наследует / от init

обычно в таких случаях указывают полный путь
Прикол вот в чем 12.07.02 18:05  
Автор: PS <PS> Статус: Elderman
Отредактировано 12.07.02 18:07  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
Как бы я вывод не перенаправлял, с 1,2 или без них - создаваемый файл - пуст !
А вот если никуда вывод не перенаправить, то при загрузке видна как она пишит: my_prog started..., интересно, а куда она будет писать дальше ? /proc/PID/fd/dev_console по прежнему пуст !!!
Внимание вопрос: почему этой строчки не оказывается в файле, куда перенаправляется stdout ?
Трабл в том, что я ей сейчас ничего кинуть не могу, что бы она мне о статусе сообщила (прога - сервачок, а клиентик не доступен).
Интересно, будет ли она и в дальнейшем так же молчаливо работать или соизволит писать в файл ?

И еще: есно в proc появляются мои открытые сокеты... хехе... никогда такое не делал, а интересно, из ОС в них что писать можно ? Сокеты типа INET, не LOCAL !
если тутда попытатся записать что либо vi , то ругается по страшному. Оно и понятно, но все же может как то можно ? ;)
Прикол вот в чем 12.07.02 18:26  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> Как бы я вывод не перенаправлял, с 1,2 или без них -
> создаваемый файл - пуст !
> А вот если никуда вывод не перенаправить, то при загрузке
> видна как она пишит: my_prog started..., интересно, а куда
> она будет писать дальше ? /proc/PID/fd/dev_console по
> прежнему пуст !!!
> Внимание вопрос: почему этой строчки не оказывается в
> файле, куда перенаправляется stdout ?

Xmm...
Ты stdout и stderr часом не закрываешь в своей программе ? Она демон ?

> Трабл в том, что я ей сейчас ничего кинуть не могу, что бы
> она мне о статусе сообщила (прога - сервачок, а клиентик не
> доступен).
> Интересно, будет ли она и в дальнейшем так же молчаливо
> работать или соизволит писать в файл ?
>
> И еще: есно в proc появляются мои открытые сокеты...
> хехе... никогда такое не делал, а интересно, из ОС в них
> что писать можно ? Сокеты типа INET, не LOCAL !
> если тутда попытатся записать что либо vi , то ругается по
> страшному. Оно и понятно, но все же может как то можно ? ;)


telnet localhost [твой порт]
и общайся с сервером руками :)
Во супер ! 12.07.02 18:54  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
Программа пишит всегда (перенаправленна в файл или нет) на tty1. Почему именно на tty1 не понятно. Нравится ей наверно :)

> Xmm...
> Ты stdout и stderr часом не закрываешь в своей программе ?
> Она демон ?

Не, не закрываю и не демон. Обычная прога.
Во супер ! 12.07.02 19:20  
Автор: XR <eXtremal Research> Статус: The Elderman
Отредактировано 12.07.02 19:20  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
> Программа пишит всегда (перенаправленна в файл или нет) на
> tty1. Почему именно на tty1 не понятно. Нравится ей наверно
> :)

Ну тут мои телепатические способности кончаются и для более подробного
ответа больного надо бы в морг на вскрытие ;)
ну разве что попробуй

man console
man 4 tty

и man init до кучи

>
> > Xmm...
> > Ты stdout и stderr часом не закрываешь в своей
> программе ?
> > Она демон ?
>
> Не, не закрываю и не демон. Обычная прога.

Дык сделай все по уму:

1) сделай из нее демона (man daemon как вариант ... я правда делаю это все руками :))
2) логи пиши через сислог (man syslog)
3) посмотри как устроены аналоги
Ни какой телепатии ! 13.07.02 01:34  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
> Ну тут мои телепатические способности кончаются и для более
> подробного
> ответа больного надо бы в морг на вскрытие ;)

В морг так в морг.

Итак любой может провести эксперемент:
Пишим програмку:

#include <stdio.h>
#include <unistd.h>

int main()
{
for(;;)
{
printf( "TEST\n" );
sleep( 2 );
}

return 1;
}

Далее пишим батник, и обзываем его run:
#!/bin/sh
cd /root/test
./test

В inittab пишим: (я запускаюсь на третьем уровне, но это не принципиально !)
test:3:boot:/root/test/run

Даем команду reboot
Теперь можно наслаждаться надписями TEST на tty1

Когда надоест переправляем наш батник:
./test > log

Перезапускаемся. ОК, на экран ничего больше не сыпится. Идем в нашу директорию. Файл log появился. vi log. ОПС ! А он пуст ! И хде наши TEST ?!

Как видишь эксперемент примитивный и доступный всем. Чесно говоря смотреть что делается в ф-ии printk мне совсем в лом. Может кто нибудь объяснит что происходит ?

P.S. Переписывать свою прогу под демон, часть ядра и пр. не хочу.
P.P.S. Местом, что ниже спины чуял, что автозапуск в линухе имеет подводные камни.
Ни какой телепатии ! 15.07.02 13:28  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
> > Ну тут мои телепатические способности кончаются и для
> более
> > подробного
> > ответа больного надо бы в морг на вскрытие ;)
>
> В морг так в морг.
>
> Итак любой может провести эксперемент:
> Пишим програмку:
>
> #include <stdio.h>
> #include <unistd.h>
>
> int main()
> {
> for(;;)
> {
> printf( "TEST\n" );
> sleep( 2 );
> }
>
> return 1;
> }
>
> Далее пишим батник, и обзываем его run:
> #!/bin/sh
> cd /root/test
> ./test

Урок N 1

Никогда не называйте ваши программы так же как системные утилиты :)

man test

> В inittab пишим: (я запускаюсь на третьем уровне, но это не
> принципиально !)
> test:3:boot:/root/test/run
>
> Даем команду reboot
> Теперь можно наслаждаться надписями TEST на tty1
>
> Когда надоест переправляем наш батник:
> ./test > log
>
> Перезапускаемся. ОК, на экран ничего больше не сыпится.
> Идем в нашу директорию. Файл log появился. vi log. ОПС ! А
> он пуст ! И хде наши TEST ?!
>
> Как видишь эксперемент примитивный и доступный всем. Чесно
> говоря смотреть что делается в ф-ии printk мне совсем в
> лом. Может кто нибудь объяснит что происходит ?
>
> P.S. Переписывать свою прогу под демон, часть ядра и пр. не
> хочу.
> P.P.S. Местом, что ниже спины чуял, что автозапуск в линухе
> имеет подводные камни.
Урок N 2 15.07.02 14:03  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>
1) чуть перепишем тестик
#include <stdio.h>
#include <unistd.h>

int main()
{
 int i=0;
 for(;;)
 {
  system("tty");
  printf( "TEST\n" );
  sleep( 2 );
  if(i>5) break;
  i++;
 }

return 1;
}


---

gcc xxx.c -o xxx
и сваливаем xxx в /etc/rc.d


2) Пишем скриптик autoexec.sh
#!/bin/bash
cd /etc/rc.d
./xxx > /etc/autoexec.log


3) добавляем в /etc/inittab

xxx:::boot:/etc/rc.d/xxx

4) ребутим систему


5) находим в /etc/autoexec.log
вот такое вот
/dev/console
/dev/console
/dev/console
/dev/console
/dev/console
/dev/console
/dev/console
TEST
TEST
TEST
TEST
TEST
TEST
TEST

Для справки - дистрибутив Slackware 8.0

BTW: ну ка покажи ка вот что
---------------
ls -l /dev/tty[0-9] /dev/console
--------------
может у тебя в ЗуЗе чего не так с консолями ?

PS: вообще то для runlevel 3 такой фигне действительно место в rc.local
буферизация ? 15.07.02 17:33  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
Ты немного подогнал тест. Если ты заметил - у меня нет выхода из проги.
Ты же его сделал ! Так и у меня работает (но это я понял, после того как прочел твой ответ).

Итак имеем буферизацию. Вернее очень на неё похоже.
Ну и как прикажешь мне с ней бороться ?
Вдогон 15.07.02 17:47  
Автор: XR <eXtremal Research> Статус: The Elderman
<"чистая" ссылка> <обсуждение закрыто>

> Ну и как прикажешь мне с ней бороться ?
man fflush

но я бы таки рекомендовал переписать твое поделие так как надо а не так как
оно есть сейчас ...
Какой, нафиг, fflush ? 15.07.02 21:31  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
Это ф-ия стандартной библиотеки.
Не я открываю файл. Его открывает командный интерпретатор, и к этому файлу я не имею никакого отношения и доступа.
Очень элементарный fflush(NULL); ;))) 16.07.02 11:08  
Автор: XR <eXtremal Research> Статус: The Elderman
Отредактировано 16.07.02 11:10  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
> Это ф-ия стандартной библиотеки.
> Не я открываю файл. Его открывает командный интерпретатор,
> и к этому файлу я не имею никакого отношения и доступа.

То есть ты уверен что данные заcтряли не в буфере твоей задачи а в буфере shell-а ;))) ?

Еще разок запусти как мой тестовый пример и убедись что сие не так
Буферизуется printf

Для того чтобЫ сбрасывать ВСЕ буфера вызывай в цикле

fflush(NULL);

PS: Тут мы плавно переходим из раздела sysadmin в раздел программинг :)
Нет, мы остаемся в сисадмининге :))) 16.07.02 14:56  
Автор: PS <PS> Статус: Elderman
<"чистая" ссылка> <обсуждение закрыто>
Только тема немного сменилась.
Теперь мы рассматриваем абстрактную програму, доступа к исходникам которой не имеем. А значит не можем в ней ничего изменить.
Итак, эта программа пишит в stdout, который буферизируется при перенаправлении в файл.
Вопрос: как средствами команд ОС сбросить этот буфер ?
Повторяю: программу менять не имеем права.
1  |  2 >>  »  




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach