Я использую Raspbian Jessie Lite на RPi3. Я создал файл в /etc/systemd/system/autostart.service:

[Unit]
Description=Application

[Service]
User=root
ExecStart=/home/pi/autostart.sh

[Install]
WantedBy=multi-user.target

Служба правильно включена и фактически выполняется. Вот источник моего сценария запуска:

#!/bin/sh
aplay -c2 -r48000 -fS16_LE < /dev/zero &
chmod 1777 /tmp
hciconfig hci0 up
/home/pi/bin/./app

Мое приложение выполняется, но имеет странное поведение, хотя его запуск из корневой консоли, так как /home/pi/bin/./app не вызывает проблем. Кроме того, конечно, сценарий autostart.sh остается в выполнении, пока мое приложение не завершится.

Чтобы исправить обе проблемы, я попытался запустить его в фоновом режиме, добавив & в конце. Или просто попытался перенаправить вывод в файл, добавив &> /home/pi/log.txt . В обоих случаях мое заявление больше не выполняется!

Что мне не хватает?

1 ответ1

0

Вы можете пропустить эти вещи:

  1. Добавьте Type=oneshot в раздел [Service]. Нет необходимости в фоновом режиме, и перенаправление вывода в файл в любом случае не будет работать в файле конфигурации. Вывод уже захвачен и перенаправлен с использованием ключа StandardOutput , который по умолчанию отправляет его в журнал systemd.

  2. Кроме того, простое создание файла не приводит к выполнению, вы также должны включить его. Бежать

    systemctl enable autostart
    

Я также отмечу, что вы в конечном итоге запускаете /home/pi/bin/app от имени пользователя root, что может быть не тем, что вам нужно для безопасности. Если нет необходимости запускать его от имени пользователя root, рассмотрите возможность запуска своего приложения от имени другого пользователя.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .