即使在注销 ssh 会话后仍继续运行 python 程序

Kri*_*lal 3 ssh python nohup

我的 python 脚本称为scrape.py. 顾名思义,它是一个网络爬虫,我希望它在我的 Linux 机器上持续运行,即使在我注销并结束 ssh 会话后也是如此。我在这里读了很多,有很多关于使用nohup python scrape.py &. 这工作得很好,但是一旦我注销,脚本执行就停止了。我也探索了该supervisor应用程序,但我没有 root 权限,所以它也失败了。你能建议我解决这个问题的方法吗?谢谢你。

pa4*_*080 9

有几种方法(工具和命令)可用于类似目的:

  1. 使用终端模拟器作为tmuxscreen

    • tmux- 终端多路复用器:它可以在一个屏幕上创建、访问和控制多个终端。tmux可以从屏幕上分离并继续在后台运行,然后重新连接。此处此处提供了其基本用法的示例。

    • screen- 带有 VT100/ANSI 终端仿真的屏幕管理器。它是一个全屏窗口管理器,它在多个进程(通常是交互式 shell)之间多路复用一个物理终端......当它们的窗口当前不可见时,即使整个屏幕会话与用户终端分离,程序也会继续运行。此处提供了使用示例。

  2. 使用在后台执行的分离命令(另请阅读):

    • nohup- 运行一个不受挂断影响的命令,输出到非 tty;运行 COMMAND,忽略挂断信号。将命令推送到后台并将其与当前 shell 会话分离的常用语法:nohup COMMAND &或者nohup COMMAND >/dev/null 2>&1 &如果您想挂起由nohup. 此处此处提供了其基本用法的示例。同样在这里被展示了如何通过SSH命令使用它。

    • disown- 类似于nohup但它是内置的 shell (zsh, ksh, bash);用于从作业表中删除作业,或标记作业,以便在父 shell 接收到 SIGHUP 信号时不会向它们发送 SIGHUP 信号(例如,如果用户注销)。此处提供了使用示例。

    • setsid- 创建一个会话并设置进程组 ID。示例用法setsid "COMMAND"。更多例子在这里

  3. 使用huponexitBash 选项:

    $ ./script.py > output.txt &
    [1] 7461
    $ shopt -s huponexit
    $ exit
    
    Run Code Online (Sandbox Code Playgroud)

    参考:

  4. 使用日程管理器作为atcrontab

    • at- 稍后执行命令;atbatch使用/bin/sh. 示例用法:echo "COMMAND" | at now + 1 minute. 更多例子在这里

    • crontab- 安排定期的后台工作;它因其他目的而广为人知,但您可以指定某个时间点,您的命令将只执行一次。这里提供一个不错的 crontab 计算器。

  5. 创建系统服务并启动,见:

  • 谢谢你,@Spas Spasov。结果证明 tmux 非常有用。 (2认同)