superdetka 0 17 августа, 2012 Опубликовано 17 августа, 2012 · Жалоба Добрый день! Не могу заставить запускаться бинарник во время загрузки Linux. Добавил в папку /etc/init.d скрипт : #!/bin/sh /home/root/app Сделал на него ссылку в /etc/rc5.d S97launch_app. Система запускается с этим runlevel. Смотрю список процессов после старта его там нет. Запускаю вручную /etc/rc5.d/S97launch_app - работает. Потом поменял в init скрипте не запуск приложения, а запуск скрипта который запускает уже приложение в бесконечном цикле. #!/bin/sh while true do /home/root/app sleep 1 done После загрузки системы вижу в top, что процесс app запускается и сразу завершается и так далее. С приложением все нормально. Поможет кто? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 17 августа, 2012 Опубликовано 17 августа, 2012 · Жалоба Абы какие скрипты в /etc/init.d класть нельзя. Они должны удовлетворять некоторому шаблону. Посмотрите, как устроен любой скрипт из этого каталога. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 17 августа, 2012 Опубликовано 17 августа, 2012 · Жалоба Что у вас за дистрибутив? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
superdetka 0 17 августа, 2012 Опубликовано 17 августа, 2012 · Жалоба Я и по шаблону делал. С case, start, stop. Но, блин, есть ли разница между шаблоном и моим скриптом? Ну не буду я start , stop парсить, это же дела скрипта. Дистрибутив : Angstrom. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 18 августа, 2012 Опубликовано 18 августа, 2012 · Жалоба что процесс app запускается и сразу завершается и так далее. Погодите, если приложение запускается и сразу выходит, то и в инит-скрипте оно тоже будет запускаться и сразу выходить. Я бы добавил в самое начало приложения что-то вроде fprintf(stderr, "Application %s started, %s %s\n", APP_NAME, __DATE__, __TIME__); Тогда будет видно в чем именно проблема, что приложение не запустилось, или оно запустилось, но работает не так как ожидалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cosmojam 0 18 августа, 2012 Опубликовано 18 августа, 2012 · Жалоба Абы какие скрипты в /etc/init.d класть нельзя. Они должны удовлетворять некоторому шаблону. Посмотрите, как устроен любой скрипт из этого каталога. Не правда. Иниту не важно что внутри скрипта, главное чтобы был исполняемым и шабанг (#!/bin/sh) присутствовал. start/stop и пр. - это удобства http://www.debian-administration.org/articles/28 Бесконечный цикл в init-скрипте - плохая идея. Если просто из терминала приложение запускается и работает, а из инит-скрипта - нет, то смотрите в сторону окружения, может не хватает какой-то ещё программы ему, которая есть у юзера в PATH, но сама переменная PATH на момент запуска init не содержит нужного пути. Или библиотека какая Я бы добавил в самое начало приложения что-то вроде fprintf(stderr, "Application %s started, %s %s\n", APP_NAME, __DATE__, __TIME__); Тогда будет видно в чем именно проблема, что приложение не запустилось, или оно запустилось, но работает не так как ожидалось. Да, но что Вам дадут дата и время сборки приложения? Тогда уж time_t t = time(NULL); fprintf(stderr, "Application %s started %s\n", argv[0], ctime(&t)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
superdetka 0 19 августа, 2012 Опубликовано 19 августа, 2012 (изменено) · Жалоба Если просто из терминала приложение запускается и работает, а из инит-скрипта - нет, то смотрите в сторону окружения, может не хватает какой-то ещё программы ему, которая есть у юзера в PATH, но сама переменная PATH на момент запуска init не содержит нужного пути. Или библиотека какая В скриптах везде указывал абсотлютные пути для приложений. Приложение динамически слинковано. Попробую проверить насчет библиотек. Да, но что Вам дадут дата и время сборки приложения? Тогда уж time_t t = time(NULL); fprintf(stderr, "Application %s started %s\n", argv[0], ctime(&t)); Я не совсем понимаю , что дадут мне эти выводы на stderr. Приложение выводит на stdout, stderr в процессе работы. Вот где бы мне посмотреть этот вывод? В системных логах? Изменено 19 августа, 2012 пользователем Kirill_Good Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 19 августа, 2012 Опубликовано 19 августа, 2012 (изменено) · Жалоба Я не совсем понимаю , что дадут мне эти выводы на stderr. Приложение выводит на stdout, stderr в процессе работы. Вот где бы мне посмотреть этот вывод? В системных логах? /home/root/app 2 > /home/report.txt Направить вывод куда надо. Изменено 19 августа, 2012 пользователем _Pasha Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
superdetka 0 19 августа, 2012 Опубликовано 19 августа, 2012 · Жалоба /home/root/app 2 > /home/report.txt Направить вывод куда надо. Делал так, файл пустой был. Правда вывода строки сразу после main не делал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 19 августа, 2012 Опубликовано 19 августа, 2012 · Жалоба Да, но что Вам дадут дата и время сборки приложения? Тогда уж Для надежности. Если только что собрал приложение и записал его на устройство, а там время сборки вчера, то значит что-то где-то работает не так как ожидалось. Я не совсем понимаю , что дадут мне эти выводы на stderr. Приложение выводит на stdout, stderr в процессе работы. Вот где бы мне посмотреть этот вывод? В системных логах? stderr не буферизирован, stdout буферизирован. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 19 августа, 2012 Опубликовано 19 августа, 2012 (изменено) · Жалоба Делал так, файл пустой был. Правда вывода строки сразу после main не делал. Может, там вообще изначально в stderr вывода не было? Не доходило типа до него. Изменено 19 августа, 2012 пользователем _Pasha Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
superdetka 0 23 августа, 2012 Опубликовано 23 августа, 2012 · Жалоба Проблема все еще остается. Выяснились новые детали. Я пробовал запускать другой бинарник для тестов с таким кодом : тестовый бинарник : int main() { fprintf(stderr, "Hello!\n"); while(1) {sleep(1);} } Добавил те же строчки в нужный. бинарник который нужно запустить : int main() { fprintf(stderr, "Hello!\n"); while(1) {sleep(1);} ... } Первый запускается на ура. Второй нет. В скрипте запуска редирект &> /home/root/log Скомпилированы одним компилятором. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
superdetka 0 23 августа, 2012 Опубликовано 23 августа, 2012 (изменено) · Жалоба Причина была в приложении. Оказалось, что #include <stdio.h> int j = printf("Global\n"); int main() { printf("Stack\n"); return 0; } gcc -Wall -o app app.c Даст на выходе "error: initializer element is not constant" g++ -Wall -o app app.c Скомпилирует без предупреждений. После запуска на stdout : Global\nStack В моем коде оказалось, что были строчки до main вроде ClassA A = new ClassA(). Я их написал, да забыл про них. Все работало. Вызывались конструкторы класса и до строчки не доходило. int main() { --->> fprintf(stderr, "Hello!\n"); ... } Не знаю как в памяти всё это размещается. Изменено 23 августа, 2012 пользователем Kirill_Good Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gemuz 0 10 октября, 2013 Опубликовано 10 октября, 2013 · Жалоба Добрый день! Не могу заставить запускаться бинарник во время загрузки Linux. Добавил в папку /etc/init.d скрипт : #!/bin/sh /home/root/app Сделал на него ссылку в /etc/rc5.d S97launch_app. Система запускается с этим runlevel. Смотрю список процессов после старта его там нет. Запускаю вручную /etc/rc5.d/S97launch_app - работает. Потом поменял в init скрипте не запуск приложения, а запуск скрипта который запускает уже приложение в бесконечном цикле. #!/bin/sh while true do /home/root/app sleep 1 done После загрузки системы вижу в top, что процесс app запускается и сразу завершается и так далее. С приложением все нормально. Поможет кто? Спасибо! Добрый день, думаю вопрос решиться при помощи: этого Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться