私は RPi3 で Raspbian Jessie Lite を実行しています。次の場所にファイルを作成しました/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
以下のものが欠けている可能性があります:
[Service] セクションに追加します
Type=oneshot
。バックグラウンドで実行する必要はありません。また、出力をファイルにリダイレクトしても、設定ファイルでは何も機能しません。出力はすでにキャプチャされ、キーを使用してリダイレクトされています。StandardOutput
デフォルトでは、出力は systemd ジャーナルに送信されます。また、ファイルを作成しただけでは実行されません。有効にする必要があります。
systemctl enable autostart
また、最終的には/home/pi/bin/app
root として実行されることになりますが、これはセキュリティ上望ましくない可能性があります。root として実行する必要がない限り、別のユーザーとしてアプリを実行することを検討してください。