
私はアートプロジェクトを手伝っています(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
しかし、私のアップデートの後、crontab
PythonプロセスIDはそれ自体は表示されません。確実にするために、構成は愚かなcrontab
間違いを犯していないことを確認しました。
* * * * * root touch test-freaking-cron
これにより、cron
実際に私の編集内容に対応していることが確認されました。
答え1
rootとして実行されるので、必要ないものを削除し、sudo
sudoはデフォルトでttyなしでは実行されません。
visudo
requirettyを実行してコメントアウトすることで、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)。