質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

8821閲覧

Raspberry piでOS起動時にPythonのプログラムを実行する方法

YuichiKawamura

総合スコア21

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2019/02/21 01:25

こちらの投稿(https://teratail.com/questions/30955)を参照して、/etc/rc.local内で以下のようなフォーマットで記述したところ成功しました。
$sudo python /home/pi/HSP/hako_demo2.py &

2,3度再起動するうちに実行がされないようになりました。
起動を確認する方法は"ps -aux | grep hako_demo2.py"のように行っています。
Raspberry piを手元に3つ持っていたため再現性を確認するため同じ操作を行ったところやはり1,2回再起動した後はOS起動時に目的のファイルが自動起動されなくなりました。

また、rc.localに一緒に記述している以下の記述は問題なく起動時に動いているのでrc.localファイル自体に何かが起きている訳では無さそうです。
sudo motion

このようなケースで自動起動がされなくなる要因は何が考えられますでしょうか。
調べても手がかりになりそうなものが見つけられなかったため些細なことでもコメント頂けましたら助かります。

yam1008👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

YuichiKawamuraさん、

実際に書かれたrc.localが提示されないので、実際どう書かれているかわかりませんが、コマンドを記述した際、バックグラウンドで起動し続けるものは、&を付ける必要があります。&をつけない場合、そのコマンドが終了後に、次の行のコマンドが実行されるので、終了しないプログラムが実行されてしまうと、次の行以降が実行されません。

  • 以下の3種類でテストしてみました。(環境はRaspberryPi3B + 2018-11-13-raspbian-stretchベース+更新)

/etc/rc.localは、systemdでは、rc-local.serviceにて、実行されるので、そのステータスも確認しています。
2番目のテストでは、Starting~~のメッセージで終わってますが、3番目では、Started~~となっています。


  • テスト : &なし
... python3 /home/pi/A.py > /tmp/a.txt python3 /home/pi/B.py > /tmp/b.txt exit 0
  • 結果
pi@raspberrypi:~ $ systemctl status rc-local ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) Drop-In: /lib/systemd/system/rc-local.service.d └─debian.conf /etc/systemd/system/rc-local.service.d └─ttyoutput.conf Active: activating (start) since Fri 2019-02-22 18:47:08 UTC; 10min ago Cntrl PID: 589 (rc.local) CPU: 266ms CGroup: /system.slice/rc-local.service ├─589 /bin/sh -e /etc/rc.local start └─599 python3 /home/pi/A.py Feb 22 18:47:08 raspberrypi systemd[1]: Starting /etc/rc.local Compatibility... Warning: rc-local.service changed on disk. Run 'systemctl daemon-reload' to reload units. pi@raspberrypi:~ $ ps aux | grep python3 root 599 0.0 0.7 11404 7444 ? S 18:47 0:00 python3 /home/pi/A.py pi 1239 0.0 0.0 4376 580 pts/0 S+ 18:57 0:00 grep --color=auto python3 pi@raspberrypi:~ $

  • テスト2: 1つめ&あり、2つめなし
... python3 /home/pi/A.py > /tmp/a.txt & python3 /home/pi/B.py > /tmp/b.txt exit 0
  • 結果
pi@raspberrypi:~ $ systemctl status rc-local ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) Drop-In: /lib/systemd/system/rc-local.service.d └─debian.conf /etc/systemd/system/rc-local.service.d └─ttyoutput.conf Active: activating (start) since Fri 2019-02-22 18:58:12 UTC; 54s ago Cntrl PID: 620 (rc.local) CPU: 376ms CGroup: /system.slice/rc-local.service ├─620 /bin/sh -e /etc/rc.local start ├─626 python3 /home/pi/A.py └─627 python3 /home/pi/B.py Feb 22 18:58:12 raspberrypi systemd[1]: Starting /etc/rc.local Compatibility... Warning: rc-local.service changed on disk. Run 'systemctl daemon-reload' to reload units. pi@raspberrypi:~ $ ps aux | grep python3 root 626 0.2 0.7 11460 7224 ? S 18:58 0:00 python3 /home/pi/A.py root 627 0.3 0.7 11456 7356 ? S 18:58 0:00 python3 /home/pi/B.py pi 1135 0.0 0.0 4376 552 pts/0 S+ 18:59 0:00 grep --color=auto python3 pi@raspberrypi:~ $

  • テスト3: 1つめ、2つめなとも&あり
... python3 /home/pi/A.py > /tmp/a.txt & python3 /home/pi/B.py > /tmp/b.txt & exit 0
  • 結果
pi@raspberrypi:~ $ systemctl status rc-local ● rc-local.service - /etc/rc.local Compatibility Loaded: loaded (/lib/systemd/system/rc-local.service; static; vendor preset: enabled) Drop-In: /lib/systemd/system/rc-local.service.d └─debian.conf /etc/systemd/system/rc-local.service.d └─ttyoutput.conf Active: active (running) since Fri 2019-02-22 19:00:18 UTC; 2min 44s ago Process: 687 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS) CPU: 418ms CGroup: /system.slice/rc-local.service ├─693 python3 /home/pi/A.py └─694 python3 /home/pi/B.py Feb 22 19:00:18 raspberrypi systemd[1]: Starting /etc/rc.local Compatibility... Feb 22 19:00:18 raspberrypi systemd[1]: Started /etc/rc.local Compatibility. Warning: rc-local.service changed on disk. Run 'systemctl daemon-reload' to reload units. pi@raspberrypi:~ $ ps aux | grep python3 root 693 0.0 0.7 11460 7152 ? S 19:00 0:00 python3 /home/pi/A.py root 694 0.0 0.7 11460 7272 ? S 19:00 0:00 python3 /home/pi/B.py pi 1148 0.0 0.0 4376 544 pts/0 S+ 19:04 0:00 grep --color=auto python3 pi@raspberrypi:~ $

  • プログラムコード
#!/usr/bin/env python3 # /home/pi/A.py import time count = 0 while True: print("A:", count) count += 1 time.sleep(1)
#!/usr/bin/env python3 # /home/pi/B.py import time count = 0 while True: print("B:", count) count += 1 time.sleep(1)

投稿2019/02/22 19:28

mt08

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まともに考えると、単にそのコードにバグがあって、目的とする動作をしなくなっただけのようにおもわれます。
まずは、本当にそのコードが実行されていないのか、ログを出力するなどして確認してはどうでしょうか。

投稿2019/02/21 01:29

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YuichiKawamura

2019/02/21 01:34

ご回答ありがとうございます。 ホームディレクトリでhello.pyというファイルにprint("hello")と書いて、 rc.localには python hello.py >> hello.txt として再起動をかけてみたのですが,ホームディレクトリにファイルは発生していませんでした。
y_waiwai

2019/02/21 01:41

「rc.local 実行されない」でぐぐるといろいろでてきます。一通り読んでみてはどうでしょう
YuichiKawamura

2019/02/21 05:20

今のところ未解決ですが、試したことを以下にメモします。 ちなみに3つあるうちの一つは問題なく動作するので、それと動かないものを比較しながら検証しています。 ・/etc/rc.localの権限確認 ・実行ファイルと書き出しファイルをフルパスで記述 ・sleepを手前に挟む
YuichiKawamura

2019/02/21 05:30

「sudo raspi-config」ないで、 ”Wait for Network at Boot” -> ” Slow Wait for network connection before completing boot” をチェック というのもやってみたのですが影響なし
Stan_Dma

2019/02/21 05:40 編集

It would not be only network, but also another thing to be affected, for example directory mounting. There might not exist a certain directory at boot, even if /usr or /home sometimes, while exists normally after boot process is done. Be careful processing at boot time.
YuichiKawamura

2019/02/21 07:14

Thank you for your answer. But, you mean /home/pi/ may not exist when raspbian bootup? If so, I have no I idea what to do...
Stan_Dma

2019/02/21 08:04 編集

I am not sure your system and your script. But I said sometimes it didnt, not always for about directory unmounting. BTW, to output into some log in your script, as other said, is definitely useful. You should execute rc.local be written something like 'python hello.py > /home/pi/hello.txt' with log file using full path name.
Stan_Dma

2019/02/21 08:14 編集

It sounds like strange for me that you have said you confirmed the execution of your scirpt by ''ps -aux | grep hako_demo2.py". It means that your script would be executed continously. Is that right?
YuichiKawamura

2019/02/21 08:19

To confirm it works or not, I did as follows sudo vim /etc/rc.local ↓ ~~~ python3 /home/pi/hello.py >> /home/pi/hello.txt exit 0 ~~~ and then after "sudo reboot" one raspberry pi works correctly but another one doesn't work.
YuichiKawamura

2019/02/21 08:23

I did ''ps -aux | grep hako_demo2.py" as confirming way it run or not. and after that, I find it didn't excute.
Stan_Dma

2019/02/21 08:23

Im afraid I don't know the difference between the one and the other. It should be taken into account SD card could be broken.
Stan_Dma

2019/02/21 08:29

> I find it didn't excute. That is why I have said that is right? A script ended up immediately would never be displayed by 'ps' command. Is that Ok? I mean whether or not your script would be executed for some time to get its footprint captured by 'ps' command.
YuichiKawamura

2019/02/21 08:31

I guess there are some possibilities about that. because the RPI didn't work correctly has old SD card. It use to be written so frequently by motion(application).
YuichiKawamura

2019/02/21 08:39

The script when I posted the question, it runs continuously until I quit manualy.
Stan_Dma

2019/02/21 08:39

That is a specific problem on your Pi box that would not work correctly. So, I understand you are going the right way. Good luck.
YuichiKawamura

2019/02/21 08:43

Thanks. I think I should take other way, for example systemd...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問