我有这样的问题 我编写了 python 脚本,并希望通过 shell 脚本启动时自动运行它。
我尝试以这种方式将此 .sh 文件添加到 crontab -e 中:
@reboot /home/path/to/my_script.sh
并在 rc.local 中:
/home/path/to/my_script.sh &
我的脚本:
conda activate /path/to/environment/bin/activate
python3 /home/path/to/main.py
在 python 文件中,我制作了写入 UART 的计数器:
import serial
ser = serial.Serial("/dev/ttyAMA0", 115200)
l = 1
while (1)
print (l)
ser.write(str(l).encode("utf-8"))
l += 1
但是没有任何东西可以帮助我在启动时运行它。
你遇到的问题很可能是因为环境变量和工作目录在启动时没有设置正确。以下是一些可以解决这个问题的步骤:
1. 使用绝对路径:
-
确保在
.sh
脚本中使用 conda、python3 和 main.py 的绝对路径 。例如:bash #!/bin/bash source /home/pi/anaconda3/etc/profile.d/conda.sh conda activate /home/pi/path/to/environment /usr/bin/python3 /home/pi/path/to/main.py
2. 指定工作目录:
-
在
.sh
脚本中使用cd
命令切换到包含main.py
的目录:bash #!/bin/bash cd /home/pi/path/to/ source /home/pi/anaconda3/etc/profile.d/conda.sh conda activate /home/pi/path/to/environment /usr/bin/python3 main.py
3. 检查用户权限:
-
确保运行脚本的用户 (默认是
pi
) 拥有执行.sh
脚本和访问 conda 环境、python3 和 main.py 的权限 。
4. 使用
&
后台运行:
-
为了避免脚本阻塞启动过程,在
rc.local
和 crontab 中使用&
符号将脚本放到后台运行:/home/path/to/my_script.sh &
5. 检查串口配置:
-
确保
/dev/ttyAMA0
是正确的串口设备,并且波特率设置 (115200) 与接收设备一致。
6. 检查日志文件:
-
检查系统日志文件
/var/log/syslog
或/var/log/messages
,查看是否有任何与脚本执行相关的错误信息。
调试建议:
-
可以尝试在脚本中添加
echo
语句或将输出重定向到文件,以便跟踪脚本的执行情况。例如:bash #!/bin/bash echo "Starting script..." >> /home/pi/script.log 2>&1 cd /home/pi/path/to/ source /home/pi/anaconda3/etc/profile.d/conda.sh >> /home/pi/script.log 2>&1 conda activate /home/pi/path/to/environment >> /home/pi/script.log 2>&1 /usr/bin/python3 main.py >> /home/pi/script.log 2>&1 echo "Script finished." >> /home/pi/script.log 2>&1
通过以上步骤,你应该能够解决脚本无法在 Raspberry Pi 启动时自动运行的问题。 如果问题仍然存在,请提供更详细的错误信息或日志文件,以便我提供更具体的帮助。
标签:python,bash,raspberry-pi4 From: 78782089