我有一个 python 脚本,我想在任何用户登录之前运行它。这是用于家庭自动化服务器的,我希望它在系统允许的情况下始终启动并运行。
我已经在rc.local
文件中有它,包括一个&符号。这行得通。
但我看不到它产生的屏幕输出。
当我通过 SSH 登录到设备(它是一个运行 raspian 的树莓派)时,我可以使用screen
它启动它,当我注销并重新登录时,它仍然存在。而且我可以看到脚本的输出。
但是当我尝试screen
从rc.local
文件运行并随后登录检查时,脚本不存在(即ps aux | grep script.py
确认)
编辑:我在下面接受了 Nirk 关于使用tail
. 从命令行,它工作正常。但是从内部开始它/etc/rc.local
不会。我已经touch
编辑了该文件,并且每个人都可以对其进行写访问。
这是我rc.local
文件中的内容:
python /home/pi/gateway.py &> /x10.log &
更新 这就是我最后的做法:
虽然问题只是关于如何在登录之前在后台运行,但还有更多问题。该脚本正在进行中,并且由于特定的串行设备对其进行操作的方式,它很容易/很容易崩溃(我几乎已经解决了所有的错误)。我还需要能够重新启动它。我试过nohup
了,但由于某种原因,它不能让它活着,所以最后我找到了这个页面的最佳答案,把它全部整理好了。
在我的/etc/rc.local
中,我包含了一个要运行的 shell 脚本:
nohup /home/pi/alwaysrun.sh > /home/pi/mha.log 2>&1 &
alwaysrun.sh
包含:
#!/bin/bash
until python /home/pi/gateway.py; do
echo "'gateway.py' exited with exit code $?. Restarting..." >&2
sleep 1
done
nohup
将使alwaysrun.sh
脚本保持活力,从而使我的gateway.py
脚本继续运行。stdout 和 stderr 的重定向意味着我可以设置一个尾部(和/或返回并检查)日志。