我的脚本在启动时遇到了大量麻烦,我尝试了无数方法并花了数小时试图让它发挥作用。
我有一个需要在启动时运行的 python 脚本。但是需要上网,所以需要等待网络。
在我尝试过的几个教程中,我尝试了很多方法,使用 crontab,通过使用 systemd 和 rc.local 创建服务,但是这些方法都没有奏效。
我能够工作的唯一方法是进行 .desktop 桌面输入,但这仅在我插入外接显示器时对我有用,而我的树莓派将在没有外接显示器的情况下运行。
此外,我能够使用 service 方法运行我的脚本,现在使用 rc.local
通过添加这一行:
sudo bash -c '/usr/bin/python3 /home/pi/Projects/capstone/main.py > /home/pi/capstone.log 2>&1' &
但是,在我尝试运行的 python 脚本中,我有以下代码:
os.system("sudo killall servod")
time.sleep(1)
os.system('sudo ~/PiBits/ServoBlaster/user/./servod')
出于某种原因,它没有正确运行我的脚本,因为我的日志中出现以下错误:
servod: no process found
sudo: /root/PiBits/ServoBlaster/user/./servod: command not found
第一个是预期的,因为我在可能启动或可能不启动时运行 sudo killall 伺服,但第二个“找不到命令”是问题所在,如果那段代码没有执行我的程序不起作用。
有人能帮我解决这个问题吗?
答案 0 :(得分:0)
替换:
os.system('sudo ~/PiBits/ServoBlaster/user/./servod')
与:
os.system('sudo /home/pi/PiBits/ServoBlaster/user/./servod')
答案 1 :(得分:0)
您也可以尝试将脚本复制到 /etc/init.d 并作为 init.d 脚本运行。您确实需要将以下内容添加到您的脚本中:
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
sudo chmod +x <yourscript.py>
sudo update-rc.d <yourscript.py> defaults
答案 2 :(得分:0)
在 python 脚本中可以轻松等待网络的一种方法是 ping 服务器直到成功 - 在这种情况下是谷歌。
def wait_for_network():
while os.system("ping -c 1 8.8.8.8") != 0:
time.sleep(1)
return
至于在启动时运行脚本,我建议编辑 /etc/xdg/lxsession/LXDE-pi/autostart
并使用格式在其中添加您的 python 脚本
@python3 home/pi/your_script.py