Intereting Posts
Ввод клавиатуры не отображается на экране? bash + как определить переменную массива с номером экземпляра Как я могу запускать сценарии командной оболочки Linux, которым нужна привилегия root с веб-страницы Как заставить терминатор отображать удаленное имя хоста в строке заголовка? Как перенаправить электронные письма из учетной записи POP3 в другую учетную запись SMTP или IMAP? Исправление ужасной производительности при просмотре / чтении видео и записи видеофайлов на диск channel 1: open failed: административно запрещено: open failed Получение «внутреннего DNS» Samba 4.1 для обновления имен хостов от dhcpd Какую графическую программу запуска я могу использовать? iptables: использует ли -m conntrack увеличение загрузки системы? Что такое размер фрагмента в файловой системе ext3? Как поставить работу в фоновом режиме без вывода? флаг noexec для / tmp (OpenSUSE) Как навсегда переделать кепку в esc в X11? Выключение X через терминал

Запустите скрипт при запуске как root после того, как все закончится

У меня есть устройство IoT с дистрибутивом Linux для Linux. Нет crontab , chkconfig или update-rc .

Как мне запустить скрипт при запуске устройства после того, как все на нем было загружено? Я думал, что смогу просто добавить скрипт в /etc/init.d но ничего не происходит. Это сценарий, который я использую.

 #! /bin/sh -e # /etc/init.d/camstart . /etc/init.d/functions.sh start() { /usr/local/packages/application/myapp } stop() { kill `pidof myapp` kill `pidof myappinternal` } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) pidof myapp pidof myappinternal ;; *) echo "Usage: $0 {start|stop|status|restart}" esac exit 0 

Моя другая идея состояла в том, чтобы использовать /etc/rc.local , но устройство не имеет этого файла. Он имеет папки rc?.d диапазоне от 1 до 6 и S. Размещение скриптов в любой из них, похоже, не оказывает никакого влияния.

Какие-либо предложения?

РЕДАКТИРОВАТЬ: Я не уверен, что это Linux дистрибутив, но проверка /etc/*release говорит мне, что он основан на Poky из Yocto Project. Из /proc/version это версия Linux 4.9.62.

Насколько я могу судить, он использует systemctl для запуска сервисов systemd .

EDIT2: забыл упомянуть. Я попытался написать сервис systemd для моего скрипта и запустить его с systemctl start app но он сразу завершается с exit code 0 systemctl start app exit code 0 .

app.server:

 [Unit] Description=app After=acap-pre.target Requires=acap-pre.target [Service] Slice=extension-acap.slice Type=oneshot RemainAfterExit=yes ExecStart=/etc/init.d/app start ExecStop=/etc/init.d/app stop того, как [Unit] Description=app After=acap-pre.target Requires=acap-pre.target [Service] Slice=extension-acap.slice Type=oneshot RemainAfterExit=yes ExecStart=/etc/init.d/app start ExecStop=/etc/init.d/app stop 

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: начал работать после того, как посмотрел на Как написать скрипт запуска для systemd и увидел, что мой systemd service отсутствует

 [Install] WantedBy=multi-user.target 

Процедура автоматического запуска демона на уровне выполнения 3 проста:

  1. поместите ваш скрипт в /etc/init.d ,
  2. проверить разрешения и владение сценарием,
  3. создайте символическую ссылку в /etc/rc3.d на скрипт со следующим именем S99scriptmame .

S означает запуск службы . Номер используется для сортировки порядка запуска службы от 01 (сценарий с высоким приоритетом) до 99 (сценарий с последним приоритетом).

Возможно, вам нужно создать ссылку на скрипт в /etc/rc0.d (halt) и /etc/rc6.d (reboot) с именем K01scriptname . Обычно последний запущенный Деймон останавливается первым.

Смотрите man init.d ^ 1 для полного объяснения.