これは私にとって最後の数週間は狂ってしまいました。何が起こっているのかわからないので、私はあなたのすべての脳を選び、誰かが賢明なことが何が起こっているか把握することができますか、少なくとも何が起こっているかを把握するためにトラックに私を取得します。MQTT Pythonはcron経由で起動したときにBashスクリプトを起動できません
それは、少し複雑になるかもしれないと私と一緒に裸をしてください!
MQTT(v3.1.1)を実行している私のいわゆるサーバであるARMデバイスに接続するクライアントスクリプト(Python v2.7)を実行する200の奇妙なARMデバイス(Raspberry Pi 3)があります。
多くの調整や新機能が頻繁に追加されるため、私は先に進んで「更新」機能を作成しました。
Essentually、次のように動作します:
- クライアントは、MQTTに接続 - >
- クライアントは、クライアントスクリプトのバージョンを実行して送信 - >
- 更新がへのリンクが利用可能な場合はサーバーが応答.tar.gzファイル - >
- クライアントから.tar.gzファイルをダウンロードして解凍します。
- クライアントは、アンパックされたフォルダに標準のbashスクリプト 'update.sh'を実行します。
このbashのファイルは、(インストールする必要があるものによって異なります。)このような「apt-getの更新」または新しいパッケージと新しいスクリプトとして新しいコマンドが含まれてい
更新は、クライアント上に強制され特定のトピックにペイロードを送信することによって、リンク[update/[devicename] 'のようにします。このデバイスはこのトピックにサブスクリプションされており、このペイロードを取得したときにファイルをダウンロードして実行します。
ここでは絶対に変わった部分があります。
完璧に動作します。
完璧なあなたは、なぜあなたは助けが必要ですか?
私はSSH経由スクリプトを実行ONLYときまあ、それは完璧に動作します。 起動時にスクリプトを実行すると、すべて更新が行われます。 msgを更新するようですが、ファイルを取得して解凍したようですが、bashスクリプトの実行に失敗するようです。これはbashスクリプトを実行していない
:私は推測していた場合
call(["sudo", "sh", "/update/update.sh"])
:
現在、Pythonは、次のコマンドを使用して、bashスクリプトを実行します。なぜ私は分からない。私が以前に述べたように、SSHで実行すると完璧に動作します。何とかcrontabが再起動時にそれを実行すると、呼び出されません。
それはすべての特権を持っているので、私が知る限り、それはそうではありません。
は、私が試してみた:
まあほとんどすべて私は考えることができます! subprocess.callからos.callまでのさまざまな呼び出し方法は、何も動作していないようでした。私はsudoersの下にユーザを追加しました。またPythonとBashスクリプトの出力を記録しようとしました。 Pythonはエラーを表示せず、Bashログファイルはまったく開始していないようです。
本当に助けになるでしょう!
あなたはジャンFranç[email protected] 'シェル= true'を –
で試すことができ、そのための魅力的な理由なしに、より複雑さと追加の障害ポイントを追加する提案をしないでください。 –
これは単なるコメントであり、答えではありません。それがうまくいかない場合は、バマー。 –