Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как сделать автозапуск скрипта при включении питания платы?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
chirik
Добрый день!

Работаю с отладочной платой Altera DE1-SoC, и стоит задача сделать автозапуск приложения.
Я не силен в линуксе, и начал поиск в интернете. По данной теме, и нашел статью "Создание своего скрипта автозапуска при загрузке компьютера" http://help.ubuntu.ru/wiki/создание_скрипта_автозапуска

Там описано 4 способа, и пока не один не заработал, хотя при наборе команд в терменале ошибок нет.

1) первый способ делаю так

Создаю файл rc.local со следующим содержанием, где мой скрипт который нужно запустить run_appl.sh в каталоге etc.
#!/bin/sh -e
./run_appl.sh
exit 0

файл run_appl.sh следующего содержания:
#!/bin/bash
echo "Run application"
echo "Run application"
#chmod +x appl
#./appl

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

2) делаю вторым способом
добавил свой скрипт в каталог /etc/init.d/run_appl.sh
update-rc.d run_appl.sh start 70 . stop 20 . (пробывал и с другими цифрами) - тоже не работает.

3) третий вариант разместить скрипт в директориях if-pre-up.d или if-up.d - тоже не заработало..
Нажмите для просмотра прикрепленного файла

4) четвертый вариант в файле /etc/network/interfaces в конце добавил строку post-up /path/to/run_appl.sh
Но тут я не доконца понимаю найдет ли путь до моего файла ОС Linux или его нужно указать?

Может кто подскажет что я делаю не так? Может скрипт нужно в бинарный файл откомпилировать?
Fedor

А у Вас на отладочной плате Ubuntu установлена?
Пришлите содержимое вашего /etc/init.d
Добавьте содержимое вашего скрипта в какой нибудь уже рабочий из каталога /etc/init.d
gerber
Цитата(chirik @ Jan 20 2015, 12:49) *
Создаю файл rc.local со следующим содержанием, где мой скрипт который нужно запустить run_appl.sh в каталоге etc.
#!/bin/sh -e
./run_appl.sh
exit 0

1) Первая строчка указывает, какой интерпретатор shell должен запустить скрипт. Вы уверены, что у вас есть файл /bin/sh ?
2) Нужно указывать полный путь до скрипта run_appl.sh, поскольку какой будет "текущий" каталог при запуске этого скрипта угадать не получится rolleyes.gif
3) Все запускаемые скрипты должны иметь атрибут выполняемого файла (chmod +x ...).
chirik
Цитата(Fedor @ Jan 20 2015, 13:20) *
А у Вас на отладочной плате Ubuntu установлена?
Пришлите содержимое вашего /etc/init.d
Добавьте содержимое вашего скрипта в какой нибудь уже рабочий из каталога /etc/init.d



При загрузке в терминал линукс пишет Yocto Project 1.3 - значит не Ubuntu стоит.

Как скопировать содержение всей папки init.d я пока не разобрался, поэтому могу выложить только принскрин содержания и при необходимости содержание нескольких файликов.
Нажмите для просмотра прикрепленного файла


Сейчас попробую добавить в какой ни будь файл свой скрипт.

Цитата(gerber @ Jan 20 2015, 13:53) *
1) Первая строчка указывает, какой интерпретатор shell должен запустить скрипт. Вы уверены, что у вас есть файл /bin/sh ?
2) Нужно указывать полный путь до скрипта run_appl.sh, поскольку какой будет "текущий" каталог при запуске этого скрипта угадать не получится rolleyes.gif
3) Все запускаемые скрипты должны иметь атрибут выполняемого файла (chmod +x ...).


1) Вы правы, я ошибся проверил командой whereis bash он находится в /bin/bash
2) А можно пример как указывается путь /folder/run_appl.sh так?
3) Те перед запуском скрипта мне нужно выполнить команду chmod +x run_appl.sh ?

исправил файл rc.local, при включении сообщения не вижу..(
#!/bin/bash
chmod +x /home/root/run_appl.sh
. /home/root/run_appl.sh
exit 0
gerber
Цитата(chirik @ Jan 20 2015, 15:29) *
1) Вы правы, я ошибся проверил командой whereis bash он находится в /bin/bash
2) А можно пример как указывается путь /folder/run_appl.sh так?
3) Те перед запуском скрипта мне нужно выполнить команду chmod +x run_appl.sh ?

1) Ну вот и причина.
2) Да, можно так для начала. В дальнейшем - посмотрите, как сконструированы другие скрипты в вашей системе, чтобы не писать каждый раз весь путь, который может быть длинный.
3) Да, но только один раз после создания файла в редакторе, а не каждый раз перед запуском.
chirik
Цитата(gerber @ Jan 20 2015, 15:51) *
1) Ну вот и причина.
2) Да, можно так для начала. В дальнейшем - посмотрите, как сконструированы другие скрипты в вашей системе, чтобы не писать каждый раз весь путь, который может быть длинный.
3) Да, но только один раз после создания файла в редакторе, а не каждый раз перед запуском.


Те так не нужно делать в файле rc.local?

chmod +x /home/root/run_appl.sh
. /home/root/run_appl.sh
gerber
Цитата(chirik @ Jan 20 2015, 16:01) *
Те так не нужно делать в файле rc.local?

chmod +x /home/root/run_appl.sh
. /home/root/run_appl.sh

Конечно, не нужно. chmod +x /home/root/run_appl.sh делается один раз, из консоли, после того, как Вы создадите файл /home/root/run_appl.sh тем или иным способом, в текстовом редакторе, или путём копирования по FTP или с флэшки.
Далее этот файл хранит атрибут исполняемого, находясь в линуксовой файловой системе. Атрибуты файлов можно увидеть по консольной команде ls -l, если среди атрибутов есть x, то файл исполняемый (eXecutable).
При перемещении/копировании внутри линуксовых файловых систем атрибуты файлов сохраняются, но вот если будете его перемещать через флэшку (где FAT), через сеть или ещё как-то - атрибуты могут потеряться. Например, всё рухнет, если Вы скопируете всю корневую систему на флэшку FAT и потом перенесете её на другой линуксовый хост, сами файлы-то переместятся - но вот атрибуты потеряются, соответственно, скрипты перестанут запускаться, и даже "настоящие" исполняемые файлы ELF.
chirik
Автозапуск так и не работает...

В каталоге /home/root находится два моих файла appl - приложение которое нужно запустить, скрипт его запускающее run_appl.sh
вид run_appl.sh :

#!/bin/bash
echo "Run application"
echo "Run application" > /home/root/me.txt
#chmod +x . /home/root/appl
./home/root/appl

в каталоге /etc создан файл rc.local :
#!/bin/bash
. /home/root/run_appl.sh
exit 0

У меня такой вопрос, файл rc.local должен запускатся командой ./rc.local ?
На данную команду терминал выдает сообщении:
-sh: ./rc.local: /bin/bash^M: bad interpreter: No such file or directory

Если я правильно понимаю ему не нравится строчка в файле rc.local : #!/bin/bash ниже проверяю путь до bash:
root@socfpga:/etc# whereis bash
bash: /bin/bash

кто подскажет почему я получаю такой ответ?

gerber
Цитата(chirik @ Jan 21 2015, 12:25) *
./home/root/appl
. /home/root/run_appl.sh

Начальные точки здесь не нужны!
Это абсолютные пути, а не относительные, точка в начале задает путь от текущего каталога.
Fedor
-sh: ./rc.local: /bin/bash^M: bad interpreter: No such file or directory
судя по символу M^ свой скрипт вы редактировали в виндовсе, и интерпретатору (вероятно) не нравится символ перевода каретки. Перевод строки в DOS и Windows это сочетание символов перевода строки и перевода каретки. в Unix только перевод строки. Отредактируйте свой скрипт по Unix правилам. Возможно после /bin/bash поможет поставленный пробел. Остальное вам уже ответили.
chirik
Заработало))
Сделал как в начале советовал Fedor, добавил строчку запуска (./home/root/appl) в файл portmap в каталоге init.d
ect/init.d/portmap

ps разобрался с символами каретки и точками заработало и вторым способом)

Всем спасибо за помощь и советы!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.