Я запускаю 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
Мое приложение выполняется, но ведет себя странно, при этом запуск его из root-консоли /home/pi/bin/./app
не приводит к проблемам. Более того, конечно, скрипт autostart.sh
остается в выполнении до тех пор, пока мое приложение не завершится.
Чтобы исправить обе проблемы, я пробовал запустить его в фоновом режиме, добавив &
в конце. Или просто пытался перенаправить вывод в файл, добавив &> /home/pi/log.txt
. В обоих случаях мое приложение больше не выполняется!
Что я упускаю?
решение1
Вам может не хватать следующих вещей:
Добавьте
Type=oneshot
в раздел [Service]. Нет необходимости делать его фоновым, и перенаправление вывода в файл в любом случае не сработает в файле конфигурации. Вывод уже захвачен и перенаправлен с помощью ключаStandardOutput
, который по умолчанию отправляет его в журнал systemd.Кроме того, простое создание файла не делает его исполняемым, его также необходимо включить. Запустить
systemctl enable autostart
Я также отмечу, что в конечном итоге вы запустите /home/pi/bin/app
его как root, что может быть не тем, что вам нужно для безопасности. Если нет необходимости запускать его как root, рассмотрите возможность запуска приложения как другого пользователя.