Python 只运行脚本form.bashrc一次

Python 只运行脚本form.bashrc一次,python,bash,raspberry-pi2,Python,Bash,Raspberry Pi2,我希望在我的raspberry pi2上的启动时执行python脚本,所以我将其放入.bashrc中。 没用 但我只想执行一次。不是每次我进入终端或者每次我通过ssh登录时。 我糟糕的尝试当然没有成功,原因显而易见 python_running=false if [ "$python_running" = false ] ; then ./launcher.sh $python_running = true fi 编辑: 我的主要问题是python脚本需要访问internet。必须在执

我希望在我的raspberry pi2上的启动时执行python脚本,所以我将其放入.bashrc中。 没用

但我只想执行一次。不是每次我进入终端或者每次我通过ssh登录时。 我糟糕的尝试当然没有成功,原因显而易见

python_running=false
if [ "$python_running" = false ] ; then
  ./launcher.sh
  $python_running = true
fi
编辑: 我的主要问题是python脚本需要访问internet。必须在执行脚本之前建立连接。 在第一次回答和评论之后,我意识到.bashrc不是在启动时启动脚本的好地方。它与autologin一起工作,但不是一个合适的解决方案。
但是,只有一次运行脚本的正确解决方案是什么呢?

好的。。所以我们需要澄清一些术语

pi(或任何unix系统)并没有真正区分“控制台”登录或ssh(远程)登录,它会将您放入shell中


然而,如果您想在启动时启动一些东西(我想这是您想要的),那么请查看/etc/rc.d-在这里查看一下-但是如果链接出现,请在/etc/rc.local中放置一个命令。要在启动时启动脚本,我找到的最好、最简单的解决方案是crontab:

sudo crontab -e
然后在文件末尾添加以下行:

@reboot sh /home/pi/launcher.sh > /home/pi/logs/cronlog 2>&1
但要使用crontab,需要将shell脚本更改为等待/轮询internet连接:

ROUTER_IP=192.168.0.1
while ( ! ping -c1 $ROUTER_IP) do
  echo "network is not up yet"
  sleep 3
done
echo "network is up now"
python3 myScript.py &

轮询可能不是最好的选择,但是每3秒创建一个睡眠进程没有错。

第一次打开终端时,是否要运行python脚本?为什么你的crontab不起作用?重新启动时的crontab似乎非常适合您的情况。
.bashrc
适用于非登录交互式shell
.bash\u profile
用于登录shell。它运行的是什么初始化系统?您需要网络组件吗?如果连接还不存在,脚本可以等待/轮询连接吗?@Eta Reisner:我喜欢轮询连接的想法,但我不知道如何在shell脚本中实现这一点。轮询是最糟糕的选择,如果可能的话,使用init系统在网络后安排自己的时间会更好,但是,除非你只需要检查本地IP地址,或者检查你是否可以解析你需要的远程地址,等等。选择一些东西并测试它。谢谢你的回答。也许我应该更新为什么crontab不起作用,/etc/rc.d也不起作用。@Sadik不是说普遍接受的解决方案“不起作用”,也许你应该展示你尝试了什么,并解释它是如何失败的,这样我们就可以试着解决它们了?这些解决方案确实适用于很多人,所以为什么要放弃它们,因为你还没有弄清楚它们?我尝试的内容在链接中提到,失败的原因在问题中提到:需要首先建立internet连接。internet连接是在启动或登录时建立的吗?如果登录,如何启动连接?