реклама на сайте
подробности

 
 
> Автоматический запуск приложения при загрузке Linux
Kirill_Good
сообщение Aug 17 2012, 08:55
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Добрый день!

Не могу заставить запускаться бинарник во время загрузки 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 запускается и сразу завершается и так далее. С приложением все нормально.

Поможет кто?

Спасибо!

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
andrew_b
сообщение Aug 17 2012, 11:59
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Абы какие скрипты в /etc/init.d класть нельзя. Они должны удовлетворять некоторому шаблону. Посмотрите, как устроен любой скрипт из этого каталога.
Go to the top of the page
 
+Quote Post
Cosmojam
сообщение Aug 18 2012, 21:12
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Цитата(andrew_b @ Aug 17 2012, 14:59) *
Абы какие скрипты в /etc/init.d класть нельзя. Они должны удовлетворять некоторому шаблону. Посмотрите, как устроен любой скрипт из этого каталога.

Не правда. Иниту не важно что внутри скрипта, главное чтобы был исполняемым и шабанг (#!/bin/sh) присутствовал. start/stop и пр. - это удобства http://www.debian-administration.org/articles/28
Бесконечный цикл в init-скрипте - плохая идея. Если просто из терминала приложение запускается и работает, а из инит-скрипта - нет, то смотрите в сторону окружения, может не хватает какой-то ещё программы ему, которая есть у юзера в PATH, но сама переменная PATH на момент запуска init не содержит нужного пути. Или библиотека какая
Цитата(kurtis)
Я бы добавил в самое начало приложения что-то вроде
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));


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Aug 19 2012, 05:05
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Цитата
Если просто из терминала приложение запускается и работает, а из инит-скрипта - нет, то смотрите в сторону окружения, может не хватает какой-то ещё программы ему, которая есть у юзера в PATH, но сама переменная PATH на момент запуска init не содержит нужного пути. Или библиотека какая

В скриптах везде указывал абсотлютные пути для приложений. Приложение динамически слинковано. Попробую проверить насчет библиотек.

Цитата
Да, но что Вам дадут дата и время сборки приложения? Тогда уж
Код
time_t t = time(NULL);
fprintf(stderr, "Application %s started %s\n", argv[0], ctime(&t));


Я не совсем понимаю , что дадут мне эти выводы на stderr. Приложение выводит на stdout, stderr в процессе работы. Вот где бы мне посмотреть этот вывод? В системных логах?


Сообщение отредактировал Kirill_Good - Aug 19 2012, 05:06
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 09:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016