Raspberry Piのcronでsudo(または起動)Pythonスクリプトを実行しますか?

Raspberry Piのcronでsudo(または起動)Pythonスクリプトを実行しますか?

私はアートプロジェクトを手伝っています(http://stargateeggbeater.com/興味のある方のために)Raspberry Piに基づいて構築されました。 RPiはspidev次のデバイスを使用して、GPIOを介してアドレス指定可能なLEDストリップを制御します。指示する。ディスプレイを起動するには、次を実行します。

sudo python lightpaint-FF.py

私たちはこのプロジェクトをパーティーやフェスティバルに披露する予定なので、リリース時に自動的に実行されるのが理想的です。 (当社のRPiにはモニターが接続されていないため、SSHを使用して別のラップトップにログインし、コードを実行してnohupから再度ログアウトする必要があります。)

この問題を解決するための最初の試みは、単純なbashスクリプトを書くことでした。

#!/bin/bash

if [ ! "$(pidof python)" ] 
 then
   sudo python /home/pi/lightpaint-FF.py
fi

/etc/crontab含めるように修正されました。

* * * * * root /home/pi/EggbeaterCronJob

必要な動作は、毎分実行中のPythonインスタンスがあることを確認し、そうでない場合はPythonスクリプトを起動することです。端末から呼び出すと、スクリプトが正しく機能していることを確認しました。

pidof python # returns nothing
sudo /home/pi/EggbeaterCronJob
pidof python # returns new process ID

しかし、私のアップデートの後、crontabPythonプロセスIDはそれ自体は表示されません。確実にするために、構成は愚かなcrontab間違いを犯していないことを確認しました。

* * * * * root touch test-freaking-cron

これにより、cron実際に私の編集内容に対応していることが確認されました。

答え1

rootとして実行されるので、必要ないものを削除し、sudosudoはデフォルトでttyなしでは実行されません。

visudorequirettyを実行してコメントアウトすることで、sudoにttyなしで実行するように指示できます。

#Default requiretty

これにはセキュリティ上の欠陥があります。ここ

答え2

起動時に起動するプログラムが必要な場合は、ほとんどの設定で最も簡単な方法はコマンドをに追加することです/etc/rc.local。ファイルがある場合は、次の行を追加します。

python /path/to/lightpaint-FF.py &

ファイルが存在しない場合は、その内容で作成してみてください。

#!/bin/sh
python /path/to/lightpaint-FF.py &
exit 0

一部の組み込みディストリビューションはこれをサポートしていません/etc/rc.local。使用しているディストリビューションが利用できない場合は、そのディストリビューションが何であるかを教えてください。


プログラムを監視し、プログラムが終了したら再起動する必要がある場合、initこれを行う方法はディストリビューションで使用するinitによって異なります。

  • 伝統的な初期化の場合は、1行を追加してください/etc/inittab。 BusyBoxはinittabをサポートできますが、これはオプションの機能であるため、コンパイル時に選択する必要があります。

    lp:2345:respawn:/usr/in/python /path/to/lightpaint-FF.py
    
  • ヌボ金持ちのためにはヌボ金持ちの職業を書いてください](http://upstart.ubuntu.com/getting-started.html)。

関連情報