在树莓派上运行作业



我写了一些简单的python脚本,我想在我的树莓派上运行它们,即使我没有登录。到目前为止,我可以通过ssh登录到机器并运行脚本,没有任何问题。当我不得不断开ssh会话时,我注意到脚本中断或停止。因此,我想知道是否有一种方法可以在ssh连接结束后保持脚本运行。

这是我正在使用的系统:Raspberry pi 3B+ with ubuntu 22.04 LTS,这是我如何运行我的脚本:

ssh xx@xxx.xxx.xxx.xxx
cd myapp/
python3 runapp.py

您可以使用nohup来停止影响进程的挂起信号。这里有三种不同的方法。


这是一个"single shot">命令,我的意思是你一次全部输入:

ssh SOMEHOST "cd SOMEWHERE && nohup python3 SOMESCRIPT &"

或者在这里,你登录,改变目录,在远程主机上得到一个新的提示,运行一些命令,然后,在某个时候,退出ssh会话:

ssh SOMEHOST
cd SOMEWHERE
nohup python SOMESCRIPT &
exit

或者,这是另一个"单次射击">,您将不会得到另一个提示,直到您输入EOF

ssh SOMEHOST <<EOF
cd SOMEWHERE
nohup python SOMESCRIPT &
EOF

如果有办法在ssh连接结束后保持脚本运行

在后台运行。

python3 runapp.py &

您可以将日志存储到系统日志。

python3 runapp.py | logger &

您可以了解screentmux虚拟终端,以便以后查看日志。您可以启动一个tmux会话,在其中运行命令并分离会话。

你可以在程序中设置一个systemd服务文件,并将其"作为服务"运行。

如果atd正在运行,您可以使用at来调度在特定时间执行的命令。

例子:

$ echo "python3 /path/to/runapp.py"|at 11:00
job 10 at Fri Jun  3 11:00:00 2022
$ echo "python3 /path/to/runapp.py" | at now
job 11 at Thu Jun  2 19:57:00 2022
# after minutes/hours/days/....
$ echo "python3 /path/to/runapp.py" | at now +5 minutes
$ echo "python3 /path/to/runapp.py" | at now +2 hours

$ ssh user@host "echo 'python3 /path/to/runapp.py'| at now"

使用at创建的作业只执行一次。