【问题标题】:Raspberry Pi 4B, running Python Script using serial at bootRaspberry Pi 4B,在启动时使用串行运行 Python 脚本
【发布时间】:2021-08-01 20:25:00
【问题描述】:

我目前在 Raspberry Pi 4 Model B 上使用 crontab 在启动时启动我的 python 脚本。 我在sudo crontab -e 的底部添加了这个:

@reboot sh /home/pi/start.sh > /home/pi/logs/cronlog 2>&1 &

我的start.sh 脚本是这样的:

#!/bin/sh
# start.sh

cd /home/pi/Desktop/Python_Scripts/Projet
sudo python3 main.py

如果我手动运行 shell 脚本,一切正常,但是在启动时运行串行通信不起作用

我已经尝试在我的 python 脚本中添加一些延迟以等待串行接口完全初始化,但它仍然不起作用。

提前感谢您的任何帮助

编辑:我必须澄清如果我运行脚本会完美运行

sh /home/pi/start.sh > /home/pi/logs/cronlog 2>&1 &

在命令行中。但是,如果我在启动时使用 crontab 运行它,唯一不起作用的是串行通信(使用示波器查找信号,它不通过串行接口发送数据)但程序的其他所有方面都运行良好.

【问题讨论】:

  • 如果这是在root的crontab中,你不需要sudo;你已经是root。这甚至有可能导致错误。
  • #!bin/sh 错误;它正在当前目录中查找目录bin,然后在其中查找sh。你想要#!/bin/sh
  • 请查看Cron job not running 了解标准故障排除提示。
  • @tripleee 我已经尝试过使用和不使用 sudo,但它们都没有工作......我在发布问题时忘记了 bin 之前的/,但它在脚本中,谢谢我编辑问题谢谢,我去查一下

标签: python python-3.x cron raspberry-pi raspberry-pi4


【解决方案1】:

cron 很可能在串行接口初始化之前执行并导致您的 python 脚本引发异常。

这可以通过在您的 python 脚本中添加一个相对较小的延迟(即:30 秒)来验证它是否能正常运行。

如果脚本只需要运行一次,一个简单的解决方法是使用autostart 文件而不是cron。此文件中的命令仅在 gui 成功启动后运行。位于/etc/xdg/lxsession/LXDE-pi/autostart

【讨论】:

  • 我的脚本没有引发任何异常,正如我在帖子中所说,我已经尝试在串行接口上​​写入数据之前添加延迟。
【解决方案2】:

我也使用 Raspberry pi4。
我建议您使用 crontab -e 而不使用 sudo
我的crontab -e 是这样的:
@reboot bash /usr/bin/start_counter.sh
我的/usr/bin/start_counter.sh

#!/usr/bin/bash
while true
do
    python3 /home/pi/people_counter_android/main.py
done

以我的方式工作。希望对您有所帮助。

【讨论】:

  • 如果脚本需要访问特权资源,它确实需要以root 的身份运行。当然,我们无法从问题中的信息中判断是否确实如此;但是关于“串行”的讨论给我的印象是它需要控制单元的 I/O 端口。
  • 脚本用 crontab 启动良好,但不通过串行接口通信。很遗憾,您的建议并不能解决我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2015-05-26
  • 2015-08-11
  • 1970-01-01
  • 2023-03-15
  • 2019-09-20
相关资源
最近更新 更多