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