Как автомтически запустить программу при загрузке ОС? (Какие могут быть варианты?)

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

MiK13
Сообщения: 1268
ОС: Linux Debian

Как автомтически запустить программу при загрузке ОС?

Сообщение MiK13 »

Когда делали систему на базе обычного 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
Модератор
Сообщения: 21289
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как автомтически запустить программу при загрузке ОС?

Сообщение Bizdelnick »

MiK13 писал:
07.08.2018 20:22
Попробовал добавить в rc2.d ещё один скрипт (делал подобное раньше) -- не выполняется.
Почему в rc2.d? Скрипты кладутся в /etc/init.d, в качестве шаблона используйте /etc/init.d/skeleton. Не забудьте сделать скрипт исполняемым. Включается он после этого update-rc.d имя_скрипта enable, если система на базе Debian, или chkconfig имя_скрипта on (именно эта команда создаст линки в rc[0-6S].d). А если в системе systemd, проще будет написать системдешный сервис.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 3095
ОС: Gentoo

Re: Как автомтически запустить программу при загрузке ОС?

Сообщение ormorph »

Ну для debian с openrc есть c псевдографическим интерфейсом прога rcconf, для установки скриптов на автозапуск.
Ну и скрипт должен находиться в каталоге /etc/init.d/.
Проверить статус скриптов:

Shell

# service --status-all
Скрипт должен запускаться, если его синтаксис позволяет запускаться с параметром start.
Спасибо сказали:
MiK13
Сообщения: 1268
ОС: Linux Debian

Re: Как автомтически запустить программу при загрузке ОС?

Сообщение MiK13 »

Bizdelnick писал:
07.08.2018 20:32
Почему в rc2.d?
Просто тогда ещё плохо разобрались с линуксом. Увидели, что скрипты в этом каталоге находятся, вот и стали туда вставлять. Потом стали вставлять в /etc/rc.local.
Bizdelnick писал:
07.08.2018 20:32
Скрипты кладутся в /etc/init.d, в качестве шаблона используйте /etc/init.d/skeleton.
Файла skeleton на этой системе я не увидел. На своём компьютере он есть. Но я (пока) не увидел смысла его использовать. Мне нужно было просто запустить программу, которая будет собирать информацию и выдавать её на верхний уровень.
Bizdelnick писал:
07.08.2018 20:32
Включается он после этого update-rc.d имя_скрипта enable, если система на базе Debian, или chkconfig имя_скрипта on (именно эта команда создаст линки в rc[0-6S].d).
chkconfig'а там не оказалось. А вот update-rc.d есть. Правда, он не понимает слово enable, вместо него использовал defaults.
Bizdelnick писал:
07.08.2018 20:32
А если в системе systemd, проще будет написать системдешный сервис.
Попытаюсь разобраться с этим позже.
ormorph писал(а):
07.08.2018 23:50
для debian с openrc есть c псевдографическим интерфейсом прога rcconf, для установки скриптов на автозапуск.
Там не Debian, а что-то сильно усечённое. В ней не dpkg, а opkg
ormorph писал(а):
07.08.2018 23:50
Проверить статус скриптов:

Shell

# service --status-all
В этой системе нет прогаммы service
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21289
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как автомтически запустить программу при загрузке ОС?

Сообщение Bizdelnick »

MiK13 писал:
08.08.2018 20:07
Мне нужно было просто запустить программу, которая будет собирать информацию и выдавать её на верхний уровень.
Все сервисы — программы, которые нужно "просто запустить". А также остановить при выключении. А ещё бывает нужно перезапустить. Да и запускать, если разобраться, нужно не "просто", а после каких-то других сервисов, без которых программа работать не сможет, как минимум монтирования файловых систем и, скорее всего, поднятия сети.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1268
ОС: Linux Debian

Re: Как автомтически запустить программу при загрузке ОС?

Сообщение MiK13 »

Bizdelnick писал:
08.08.2018 20:24
Все сервисы — программы, которые нужно "просто запустить". А также остановить при выключении.
Обязательно останавливать? А что может быть, если не останавливать? Система же, по poweroff сама должна завершить работу всех программ.
Bizdelnick писал:
08.08.2018 20:24
А ещё бывает нужно перезапустить.
Это, скорее всего, будет делаться тумблером питания.
Bizdelnick писал:
08.08.2018 20:24
Да и запускать, если разобраться, нужно не "просто", а после каких-то других сервисов, без которых программа работать не сможет, как минимум монтирования файловых систем и, скорее всего, поднятия сети.
Это понятно. Всё ПО можно разделить на две части: сам Linux с определёнными настройками (в основном IP адрес и маршруты) и программы обслуживания конкретной системы.
Система не интерактивная, связь с верхним уровнем -- только Ethernet (на случай восстановления -- RS-232). Поэтому после загрузки всех основных компонент Linux (надо будет ещё разобраться, что можно выкинуть -- загрузка идёт очень долго, около минуты) должна быть запущена программа обслуживания оборудования. Мы это делали помещая команды запуска в скрипт /etc/rc.local (кстати, в Stretch его "почему-то" не оказалось). Но здесь это "почему-то" не работает...
Дальнейший анализ показал, что rc.local запускается как и все другие сервисы через /etc/rc[2-5].d/S06rc.local -> ../init.d/rc.local. Причём, в нём реализована только опция Start. Значит надо будет сделать аналогичным образом,
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21289
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Как автомтически запустить программу при загрузке ОС?

Сообщение Bizdelnick »

MiK13 писал:
08.08.2018 23:24
Обязательно останавливать? А что может быть, если не останавливать? Система же, по poweroff сама должна завершить работу всех программ.
Если не останавливать через сервис, система инициализации, конечно, отправит процессу SIGTERM, но уже после остановки всех сервисов. Сможет ли программа в таком случае, скажем, корректно сохранить свои данные, — это большой вопрос. Сети точно уже не будет, файловые системы тоже могут оказаться недоступны.
MiK13 писал:
08.08.2018 23:24
то, скорее всего, будет делаться тумблером питания.
Можно подумать, Вы никогда не занимаетесь отладкой, не правите конфиги, не заменяете бинарь на исправленный прямо на работающей системе…

В общем, minimum minimorum команд, которые должен понимать init-скрипт — start, stop, restart.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
MiK13
Сообщения: 1268
ОС: Linux Debian

Re: Как автомтически запустить программу при загрузке ОС?

Сообщение MiK13 »

Bizdelnick писал:
09.08.2018 11:22
Если не останавливать через сервис, система инициализации, конечно, отправит процессу SIGTERM, но уже после остановки всех сервисов. Сможет ли программа в таком случае, скажем, корректно сохранить свои данные, — это большой вопрос. Сети точно уже не будет, файловые системы тоже могут оказаться недоступны.
Меня это не волнует. Программе не нужно сохранять никакие данные. При запуске она должна будет только загрузить программу в DSP и запустить её. А в процессе работы только получать запросы от верхнего уровня, передавать их DSP, а также данные, обработанные в DSP передавать на верхний уровень.
Это сейчас, во время отладки, я подключаюсь к ней по ssh и sshfs для обновления программ. И в конце работы останавливаю через halt.
В процессе эксплуатации ничего подобного не будет.
Кстати, спасибо, что упомянули про сохранение данных,
В другой, сопровождаемой нами системе вспомогательные программы получают информацию от разных источников и сохраняют её в разделяемой памяти. Но есть одна программа, которая пишет в файл информацию о событиях. Её запуск я, пожалуй, выделю в отдельный init-скрипт с возможность завершения её работы с закрытием текущего файла.
Спасибо сказали: