Когда делали систему на базе обычного PC, то просто добавляли команды в скрипт /etc/rc.local (система Debian)
Но тут возникла ситуация другая. Компьютер -- MityDSP OMAP L138 от criticallink. С двумя процессорами -- ARM926EJ-S rev 5 (v5l) и какой-то DSP (674x от Texas Instrument, ещё надо быстро разобраться с доступом к нему).
Что там за Linux, не знаю. В /etc файл rc.local, по-моему, есть (точно уже не помню, но, по-моему, я его не создавал). Но команды, помещённые в него, не выполняются.
Также в /etc есть init.d с набором скриптов, и rc[0-6S].d со ссылками на них. Попробовал добавить в rc2.d ещё один скрипт (делал подобное раньше) -- не выполняется. Правда, скопировал файлы веб-сервера boa из deb-файла -- он запускается.
Попробовал команды запуска программы (cd и собственно запуск) поместить в скрипт /etc/network/if-up.d/set_ip (он выполняется). Программа запускается, причём два раза (выдаёт : Call bind ERROR: Address already in use и потом pgrep (запускаемый там же) показывает, что она запущена. Но после подключения к компьютеру по ssh я её не вижу.
P.S. Потребовалась ещё загрузка модуля dsplinkk.ko. Сдублировал файл (и ссылки), относящиеся к запуску boa под именем bot и оставил в нём только команду загрузки модуля (если нет /etc/dsplink). Работает. Добавил туда команды запуска программы. Выдал reboot, подключился -- pgrep выдал, что программа запущена. Но почему-то pgrep -lf перед строкой программы выдаёт ещё
Unknown HZ value! (93) Assume 100. В моей программе таких слов нет.
Какие вообще существуют правила запуска прогамм-демонов при загрузке ОС?
Как автомтически запустить программу при загрузке ОС? (Какие могут быть варианты?)
Модератор: Bizdelnick
-
- Сообщения: 1268
- ОС: Linux Debian
-
- Модератор
- Сообщения: 21289
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как автомтически запустить программу при загрузке ОС?
Почему в rc2.d? Скрипты кладутся в /etc/init.d, в качестве шаблона используйте /etc/init.d/skeleton. Не забудьте сделать скрипт исполняемым. Включается он после этого update-rc.d имя_скрипта enable, если система на базе Debian, или chkconfig имя_скрипта on (именно эта команда создаст линки в rc[0-6S].d). А если в системе systemd, проще будет написать системдешный сервис.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 3095
- ОС: Gentoo
Re: Как автомтически запустить программу при загрузке ОС?
Ну для debian с openrc есть c псевдографическим интерфейсом прога rcconf, для установки скриптов на автозапуск.
Ну и скрипт должен находиться в каталоге /etc/init.d/.
Проверить статус скриптов:
Скрипт должен запускаться, если его синтаксис позволяет запускаться с параметром start.
Ну и скрипт должен находиться в каталоге /etc/init.d/.
Проверить статус скриптов:
Shell
# service --status-all
-
- Сообщения: 1268
- ОС: Linux Debian
Re: Как автомтически запустить программу при загрузке ОС?
Просто тогда ещё плохо разобрались с линуксом. Увидели, что скрипты в этом каталоге находятся, вот и стали туда вставлять. Потом стали вставлять в /etc/rc.local.
Файла skeleton на этой системе я не увидел. На своём компьютере он есть. Но я (пока) не увидел смысла его использовать. Мне нужно было просто запустить программу, которая будет собирать информацию и выдавать её на верхний уровень.Bizdelnick писал: ↑07.08.2018 20:32Скрипты кладутся в /etc/init.d, в качестве шаблона используйте /etc/init.d/skeleton.
chkconfig'а там не оказалось. А вот update-rc.d есть. Правда, он не понимает слово enable, вместо него использовал defaults.Bizdelnick писал: ↑07.08.2018 20:32Включается он после этого update-rc.d имя_скрипта enable, если система на базе Debian, или chkconfig имя_скрипта on (именно эта команда создаст линки в rc[0-6S].d).
Попытаюсь разобраться с этим позже.Bizdelnick писал: ↑07.08.2018 20:32А если в системе systemd, проще будет написать системдешный сервис.
Там не Debian, а что-то сильно усечённое. В ней не dpkg, а opkg
В этой системе нет прогаммы service
-
- Модератор
- Сообщения: 21289
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как автомтически запустить программу при загрузке ОС?
Все сервисы — программы, которые нужно "просто запустить". А также остановить при выключении. А ещё бывает нужно перезапустить. Да и запускать, если разобраться, нужно не "просто", а после каких-то других сервисов, без которых программа работать не сможет, как минимум монтирования файловых систем и, скорее всего, поднятия сети.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 1268
- ОС: Linux Debian
Re: Как автомтически запустить программу при загрузке ОС?
Обязательно останавливать? А что может быть, если не останавливать? Система же, по poweroff сама должна завершить работу всех программ.Bizdelnick писал: ↑08.08.2018 20:24Все сервисы — программы, которые нужно "просто запустить". А также остановить при выключении.
Это, скорее всего, будет делаться тумблером питания.
Это понятно. Всё ПО можно разделить на две части: сам Linux с определёнными настройками (в основном IP адрес и маршруты) и программы обслуживания конкретной системы.Bizdelnick писал: ↑08.08.2018 20:24Да и запускать, если разобраться, нужно не "просто", а после каких-то других сервисов, без которых программа работать не сможет, как минимум монтирования файловых систем и, скорее всего, поднятия сети.
Система не интерактивная, связь с верхним уровнем -- только Ethernet (на случай восстановления -- RS-232). Поэтому после загрузки всех основных компонент Linux (надо будет ещё разобраться, что можно выкинуть -- загрузка идёт очень долго, около минуты) должна быть запущена программа обслуживания оборудования. Мы это делали помещая команды запуска в скрипт /etc/rc.local (кстати, в Stretch его "почему-то" не оказалось). Но здесь это "почему-то" не работает...
Дальнейший анализ показал, что rc.local запускается как и все другие сервисы через /etc/rc[2-5].d/S06rc.local -> ../init.d/rc.local. Причём, в нём реализована только опция Start. Значит надо будет сделать аналогичным образом,
-
- Модератор
- Сообщения: 21289
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Как автомтически запустить программу при загрузке ОС?
Если не останавливать через сервис, система инициализации, конечно, отправит процессу SIGTERM, но уже после остановки всех сервисов. Сможет ли программа в таком случае, скажем, корректно сохранить свои данные, — это большой вопрос. Сети точно уже не будет, файловые системы тоже могут оказаться недоступны.
Можно подумать, Вы никогда не занимаетесь отладкой, не правите конфиги, не заменяете бинарь на исправленный прямо на работающей системе…
В общем, minimum minimorum команд, которые должен понимать init-скрипт — start, stop, restart.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 1268
- ОС: Linux Debian
Re: Как автомтически запустить программу при загрузке ОС?
Меня это не волнует. Программе не нужно сохранять никакие данные. При запуске она должна будет только загрузить программу в DSP и запустить её. А в процессе работы только получать запросы от верхнего уровня, передавать их DSP, а также данные, обработанные в DSP передавать на верхний уровень.Bizdelnick писал: ↑09.08.2018 11:22Если не останавливать через сервис, система инициализации, конечно, отправит процессу SIGTERM, но уже после остановки всех сервисов. Сможет ли программа в таком случае, скажем, корректно сохранить свои данные, — это большой вопрос. Сети точно уже не будет, файловые системы тоже могут оказаться недоступны.
Это сейчас, во время отладки, я подключаюсь к ней по ssh и sshfs для обновления программ. И в конце работы останавливаю через halt.
В процессе эксплуатации ничего подобного не будет.
Кстати, спасибо, что упомянули про сохранение данных,
В другой, сопровождаемой нами системе вспомогательные программы получают информацию от разных источников и сохраняют её в разделяемой памяти. Но есть одна программа, которая пишет в файл информацию о событиях. Её запуск я, пожалуй, выделю в отдельный init-скрипт с возможность завершения её работы с закрытием текущего файла.