通过 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
您也可以使用方便的简写形式,例如 tomorrow
或 noon
,如
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 即可执行。
我正在 运行通过 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
您也可以使用方便的简写形式,例如 tomorrow
或 noon
,如
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 即可执行。