我试图在每次 python 脚本在我的树莓派上崩溃时自动启动它。我遵循此处提供的 shell 脚本解决方案:https://raspberrypi.stackexchange.com/questions/14735/how-do-i-restart-a-python-program-on-my-pi-when-it-crashes
在根目录中,我创建了一个带有sudo nano constantrun.sh
.
该 shell 脚本的内容当前为(考虑到评论和答案中提供的更改后):
#!/bin/sh
COMMAND='python home/pi/projects/mypythonscript.py'
LOGFILE=restart.txt
writelog() {
now=`date`
echo "$now $*" >> $LOGFILE
}
writelog "Starting"
while true ; do
$COMMAND
writelog "Exited with status $?"
writelog "Restarting"
done
然后我跑去sudo chmod +x constantrun.sh
让它可执行。
之后,我sudo sh constantrun.sh
成功运行了脚本。
该脚本现在可以初始化。但是,由于我的 python 脚本使用 mysqlconnector 模块,我现在收到的错误是:Traceback (most recent call last): File "mypythonscript.py", line 8, in <module> import mysql.connector as mariadb ImportError: No module named mysql.connector
使用文件资源管理器,似乎发现 mysql.connnector 安装在home/pi/.local/lib/python2.7/site-packages/mysql_connector-2.1.6.dist-info
我该如何解决这个错误?
答案1
您没有x
权限(执行)您的mypythonscript.py
.您需要chmod
为此使用:
chmod +x /home/pi/projects/mypythonscript.py
另外,您可能需要一个舍邦对于你的 python 脚本,例如:
#!/usr/bin/python3
答案2
感谢那些对我的查询发表评论/回答的人的输入,运行 shell 脚本的问题现已解决。其中最主要的有用建议是 Fox 建议在我的 shell 脚本命令行中使用引用,以及建议在全局范围内重新安装我的 python 脚本所需的模块。
总而言之,我的 shell 脚本如下:
#!/bin/sh
COMMAND='python home/pi/projects/mypythonscript.py'
LOGFILE=restart.txt
writelog() {
now=`date`
echo "$now $*" >> $LOGFILE
}
writelog "Starting"
while true ; do
$COMMAND
writelog "Exited with status $?"
writelog "Restarting"
done
然后我跑去sudo chmod +x constantrun.sh
让它可执行。之后,我运行了脚本sudo sh constantrun.sh
然后我遇到了导入模块错误:ImportError: No module named mysql.connector
通过 pip 卸载 mysql.connector 解决了这个问题。然后我继续使用 mysql.connector 进行全局安装sudo pip install mysql-connector-python
。然后我的 shell 脚本可以使用 成功启动sudo sh constantrun.sh
。
然而,虽然它目前正在工作,但我不完全确定这种方法从长远来看是否确实可以帮助在脚本崩溃时自动重新启动脚本。我将进一步监测该方法是否有效。