Распбиан Джесси: сценарий запуска не работает

740
Mark

Я использую 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. В обоих случаях мое заявление больше не выполняется!

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

0

1 ответ на вопрос

0
Mark Stosberg

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

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

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

    systemctl enable autostart 

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

Я отредактировал свой вопрос, сервис уже включен. Я попробую настройки "oneshot". После дальнейшего копания я закончил проблемы из-за некоторых переменных env, не установленных при запуске моего приложения. Я экспортировал их из `/ etc / profile`, возможно, они не прочитаны (пока?) Из systemd. Mark 7 лет назад 0
Чтобы предоставить переменные среды для systemd, используйте либо [`Environment =`] (https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Environment=) o [`PassEnvironment =` ] (https://www.freedesktop.org/software/systemd/man/systemd.exec.html#PassEnvironment=), как указано в документации. Mark Stosberg 7 лет назад 1