起動時にプログラムを自動的に起動するRaspberry Pi


22

センサーを搭載した2つのRaspberry Pi(runnnig Raspbian)と、データを収集するベースステーションRaspberry Piで構成されるワイヤレスセンサーネットワークを構築しました。

システムを実行するたびに、各センサーユニットにログインし、センサーデータの収集用とベースステーションへの送信用の2つのループPythonプログラムを実行する必要があります。

これらのユニットはインターネットにアクセスできない場所に移動するので、モニター、キーボード、マウスを携帯して実行するのは簡単ではありません。自動的にログインし、プログラム1を実行し、起動時にプログラム2を自動的に実行するように設定する方法はありますか?

回答:


15

これらの2つのプログラムをrc.localファイルに追加できます。これにより、起動時にそれらが実行されます。詳細については、http://www.raspberrypi.org/documentation/linux/usage/rc-local.mdを参照してください


3
ない人をつまずかているようだというドキュメント内のポイントは:使用しないでくださいsudorc.local自分自身。起動時にルート権限で実行されます。&プログラムがすぐに何かをして終了しない限り、使用に関する部分に注意を払ってください。
goldilocks

あなたのプログラムがネットワークの後に実行したい場合は、最大で、かつ/path/to/somescript.sh &rc.local、スクリプトの追加でwhile ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;、あなたのプログラムを開始する前に。
TorのKlingberg

+ goldilocks問題は、rc.local事前にsudoを実行しないと書き込みアクセスを達成できないことです。何を指示してるんですか?
リンスウィンド

15

Xer0FyTによる答えは、おそらくPIでプログラムを自動的に開始する最も簡単な方法です。ただし、プロセス監視がないため、再起動されないため、何らかの理由で開始されたプログラムがクラッシュすると、問題が発生します。個人的には、代わりにdaemontoolsを使用することをお勧めします。セットアップは非常に簡単です(Raspbianに含まれています)。基本的にrun、プログラムを起動するシェルスクリプトを含むサービスディレクトリを作成します。デーモンツールは、何らかの理由でクラッシュした場合にプログラムが開始および再起動されることを確認します。

daemontoolsのセットアップはとても簡単です。ただ

apt-get install daemontools daemontools-run

次に、実行可能な実行スクリプトを含むサービスディレクトリを作成します。

# create the service directory
mkdir -p /service/my-service

# create the run script
cat > /service/my-service/run <<EOF
#!/bin/sh
echo "I'm an example service executed by daemontools"
sleep 1
# Replace those 2 lines with a real call to your program like this:
# exec /my/program.py --arguments
EOF

# make it executable
chmod 755 /service/my-service/run

を見て/service/my-service/run編集して、を実行する代わりに独自のプログラムを起動しますecho。それが完了したら、そのディレクトリをシンボリックリンクし/etc/serviceてdaemontoolsが自動的に(再)起動するようにします:

cd /etc/service
ln -s /service/my-service .

約5秒後にプログラムが実行されます。を使用して開始/停止できます

# stop it
$ svc -d /service/my-service

# start it
$ svc -u /service/my-service

syslogなどにログを記録することもできます。したがって、プログラムの出力は失われません。これについては、https//info-beamer.com/blog/running-info-beamer-in-productionでより完全なブログ記事を書きました


9
  1. Raspianで、[メニュー]、[設定]、[メインメニューエディター]の順にクリックします
  2. [設定]をクリックし、LXSessionのデフォルトアプリケーションを確認します
  3. [OK]をクリックして、メインメニューエディターを閉じます
  4. [メニュー]をクリックし、[設定]で[LXSessionのデフォルトアプリケーション]をクリックします。
  5. LXSession構成が開きます
  6. 自動開始をクリックします
  7. 手動で自動起動されるアプリケーションの下で、javaコマンドラインに貼り付けます
  8. 追加をクリックします
  9. LXSession構成アプリケーションを閉じて、piを再起動します

    Javaアプリは再起動後に実行する必要があります


ここでもう少し詳細が必要だと思う
ダースベイダー

私のためにうまくいきました!
-jbyrnes

ありがとう@Palmeta!自動起動のプログラムが1つありましたが、実際に設定した場所を忘れていました。私はいたるところを見ました。説明した構成ツールを使用して、ようやく再び見つけて非アクティブ化できました:D!100ポイント
パスカルラマーズ

2

おそらくcron、PIのハウスキーピングタスクのいくつかのためにすでにインストールされています。

を検索man 5 crontab@rebootます。


0

あなたは研究したいと思うかもしれませんservice。システムの初期化の一部である初期化スクリプトを作成し、適切なランレベルに配置できます。

を実行しますman service

initスクリプトの作成ガイドは次のとおりです。http//www.novell.com/coolsolutions/feature/15380.html


2
悲しいことに、systemdRaspbianを含むほとんどのLinuxディストリビューションへのレミングのようなラッシュにより、OPがシステムを更新してsysVを引き継ぐ場合、この答えは更新する必要がありますinit... 8
SlySven

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.