Выполнение скрипта при запуске с помощью BeagleBone Black

У меня есть a.out, который я хочу запускать при загрузке моего BeagleBone. На самом деле это сервер сокетов, который я хочу запустить, как только BeagleBone включится. Я пытался поставить это в /etc/init.d, но это не помогло. Я написал сценарий оболочки для запуска этого исполняемого файла, но даже это не помогло.

Что я могу сделать, чтобы скрипт запускался сразу после загрузки?


person Sagar Sm    schedule 04.03.2015    source источник
comment
Добро пожаловать в Stack Overflow! Я переформулировал ваш вопрос таким образом, чтобы его было легко понять, и я дал ссылку на доску на случай, если кто-то не знаком с ним.   -  person Kevin Brown    schedule 06.03.2015
comment
Какой именно дистрибутив Debian (и версию) вы используете на своем BBB? Я спрашиваю, потому что сначала вам нужно выяснить, какая система инициализации находится в использовать для своего дистрибутива. Насколько я помню, некоторые версии BBB поставляются с systemd. Если это ваш случай - вам нужно выяснить, как создать скрипт инициализации для systemd, или заменить его на sysv-init. Также см. этот вопрос.   -  person Sam Protsenko    schedule 06.03.2015
comment
Я нашел решение, я написал сервис в /lib/systemd для запуска моего файла a.out при включении питания, он отлично работает. В любом случае, спасибо за помощь, Сэм   -  person Sagar Sm    schedule 11.03.2015


Ответы (2)


Мне потребовалось довольно много времени, чтобы понять это, но после долгих исследований я, наконец, нашел то, что искал.

  1. Скомпилируйте необходимый код.

  2. Создайте bash-скрипт, который будет запускать код при загрузке/запуске

    cd /usr/bin/
    

    Введите nano scriptname.sh

    #!/bin/bash
    /home/root/name_of_compiled_code
    

    Сохранить и предоставить разрешение на выполнение

    chmod u+x /usr/bin/scriptname.sh
    
  3. Создать сервис

    nano /lib/systemd/scriptname.service
    
  4. При необходимости отредактируйте вышеуказанный файл, чтобы вызвать различные функции, такие как network. Включайте их только в том случае, если код нуждается в этой конкретной службе. Отключите ненужные, чтобы уменьшить время загрузки.

    [Unit]
    Description=description of code
    After=syslog.target network.target
    [Service]
    Type=simple
    ExecStart=/usr/bin/scriptname.sh
    [Install]
    WantedBy=multi-user.target
    
  5. Создайте символическую ссылку, чтобы устройство знало местоположение службы.

    cd /etc/systemd/system/
    ln /lib/systemd/scriptname.service scriptname.service
    
  6. Заставьте systemd перезагрузить файл конфигурации, немедленно запустите службу (помогает проверить, работает ли служба должным образом) и включите юнит-файлы, указанные в командной строке.

    systemctl daemon-reload
    systemctl start scriptname.service
    systemctl enable scriptname.service
    
  7. Немедленно перезапустите BBB, чтобы проверить, работает ли он должным образом.

    reboot
    

(Все кредиты принадлежат http://mybeagleboneblackfindings.blogspot.com/2013/10/running-script-on-beaglebone-black-boot.html)

person Cory Biegel    schedule 10.07.2015

Я выполнил 7 шагов, чтобы создать службу, но она у меня не работает, затем я поместил свои команды сценария оболочки для запуска моей программы в /etc/rc.local, и это сработало.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

cd /home/my_program_directory
/home/my_program_directory/my_executable

exit 0
person Jeff Pal    schedule 04.08.2017