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

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

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

答案1

您可以使用多种方法(工具和命令)来实现类似的目的:

  1. 使用终端仿真器作为tmuxscreen

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

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

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

    • nohup- 运行不受挂断影响的命令,输出到非 tty;运行命令,忽略挂断信号。将命令推送到后台并将其与当前 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
    

    参考:

  4. 使用计划管理器作为atcrontab

    • at- 稍后执行命令;atbatch使用 从标准输入或指定文件读取稍后执行的命令/bin/sh。示例用法:echo "COMMAND" | at now + 1 minute。更多示例这里

    • crontab- 安排定期后台工作;它以其他用途而闻名,但您可以指定命令只执行一次的特定时间。提供了一个不错的 crontab 计算器这里

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

相关内容