好吧,这让我在过去的几周内疯狂,我不知道发生了什么,所以我希望能够挑选出所有的大脑,看看是否更聪明的人可以弄清楚发生了什么事情,或者至少让我走上正确的道路来弄清楚发生了什么。MQTT Python无法在通过cron调用时启动Bash脚本
这就是说,请裸露我可能会有点复杂!
我有200多个运行客户端脚本(Python v2.7)的ARM设备(Raspberry Pi 3's)连接到运行MQTT(v3.1.1)的1 ARM设备,我所谓的服务器。
由于频繁添加了许多调整和新功能,我继续创建“更新”功能。
Essentually,其工作原理如下:
- 客户端连接到MQTT - >
- 客户端发送运行的客户端脚本版本 - >
- 如果更新可用的链接到服务器响应.tar.gz文件 - >
- 客户端下载.tar.gz文件并将其解压缩。
- 客户端在解压后的文件夹中运行标准bash脚本'update.sh'。
此bash的文件包含新的命令,如“apt-get的更新”或新的包和一个新的脚本(根据需要安装的东西。)
更新是在客户端强制通过发送一个有效载荷到一个特定的主题,比如'update/[devicename]'链接。该设备是以这个主题为基础的,并且会在获得该有效载荷时下载并运行该文件。
现在这里是绝对怪异的部分!
它工作完美!
完美的你说,那你为什么需要帮助?
那么,它可以完美运行ONLY当我运行通过SSH的脚本。 如果我在启动时运行该脚本,除了更新之外,一切都可以运行。它似乎得到更新的味精,它似乎得到的文件和解压缩,但它似乎无法运行bash脚本。如果我猜
call(["sudo", "sh", "/update/update.sh"])
:
它不运行bash脚本
目前,Python的运行具有以下命令的bash脚本。我不知道为什么。正如我前面提到的,当我通过SSH运行它时它工作得很好,不知何故,当crontab在重新启动时运行它时,它不会被调用。
它确实拥有所有的特权,所以据我所知,事实并非如此。
我已经试过:
好了几乎所有我能想到的!不同的调用方法,从subprocess.call到os.call,似乎没有任何工作。我还在sudoers下添加了用户,并且还尝试记录Python和Bash脚本的输出。 Python显示没有错误,Bash日志文件似乎根本没有启动。
任何帮助都会真的得到满足!
你可以用'壳= TRUE' –
@让FrançoisFabre尝试,请不要让增加更多的复杂性和额外的故障点,而一个引人注目的原因相同的建议。 –
这只是一个评论,而不是一个答案。如果它不起作用,那么很无聊。 –