通过 ssh "python3 sample_program.py &" 的替代方案是什么?

What are the alternatives to "python3 sample_program.py &" via ssh?

我正在 运行通过 ssh 在 python 上创建一个 python 脚本 sample_program.py。我登录机器,运行

python3 sample_program.py &

并使用命令 'exit' 注销。不幸的是,脚本会在几分钟后停止 运行ning。

我还可以使用什么来远程 运行 python 脚本而不保持终端打开?

您可以使用at命令。 at 稍后执行命令。 at 实用程序应从标准输入读取命令并将它们组合在一起作为作业,以便稍后执行。 有关更多信息、选项、示例和其他内容,请参阅 [Ubuntu 联机帮助页存储库][1]

示例:

at now +8 hours -f python3 sample_program.py

您也可以使用方便的简写形式,例如 tomorrownoon,如

echo "tweet fore" | at teatime 

独立于任何终端

ssh root@remoteserver '/root/backup.sh </dev/null >/var/log/root-backup.log 2>&1 &'

您需要关闭所有连接到 ssh 套接字的文件描述符,因为只要某个远程进程打开套接字,ssh 会话就不会关闭。如果您对脚本的输出不感兴趣(可能是因为脚本本身负责写入日志文件),请将其重定向到 /dev/null(但请注意,这将隐藏错误,例如无法启动脚本)。

使用nohup在这里没有任何作用。 nohup 安排它运行的程序在程序的控制终端消失时不接收 HUP 信号,但这里首先没有终端,因此不会突然向进程发送 SIGHUP .此外,nohup 将标准输出和标准错误(但不是标准输入)重定向到文件,但前提是它们已连接到终端,而终端又不是。

您可以设置一个 cron 作业。

例如,如果现在时间是 14:39:00 而今天是 8 月 30 日星期五,您可以使用 crontab -e 在您的 crontab 文件中添加以下 cron 作业(将在 8 小时后执行)命令:

39 22 30 8 5  /path/to/python3 /path/to/sample_program.py

nohup

nohup python3 sample_program.py &

是最简单的方式(man nohup):

nohup - run a command immune to hangups, with output to a non-tty

恕我直言,它无处不在。

将 shebang 添加到脚本的开头!

 #!/usr/bin/python3 

赋予其执行权限。

chmod +x python3

远程执行!

sudo nohup ./python3 >/dev/null 2>&1 & 

这样它将 运行 作为后台进程并与终端分离,您将不会编写不必要的 nohup.out 文件。

您甚至不需要 Linux 中的 .py 文件扩展名,也不需要使用比需要更多的字符:

{ python3 python3.py } 

一样
{ ./python3 } 

它只需要 shebang 即可执行。