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

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

ただいまの
回答率

87.61%

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

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 6,350

score 21

こちらの投稿(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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/21 17:39

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

    キャンセル

  • 2019/02/21 17: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.

    キャンセル

  • 2019/02/21 17:43

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

    キャンセル

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)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る