简介:在数据科学、Web 开发或者其他需要长时间运行的任务中,我们经常需要让 Python 脚本在后台运行。尤其是在远程服务器上,可能因为网络不稳定或需要执行多个任务,我们不希望 Python 脚本因为终端关闭而被终止。这时,nohup 就是一个非常实用的工具。本文将详细介绍 nohup 的特点、使用步骤、案例以及注意事项。
历史攻略:
使用Supervisor部署Sanic应用
使用Gunicorn部署Sanic应用
特点:
1、持久运行:使用 nohup 启动的程序会忽略所有的挂断(hangup)信号,即使你退出了终端,它也会继续运行。
2、日志记录:默认情况下,nohup 会把输出信息保存到一个叫做 nohup.out 的文件中,方便你之后查看。
3、灵活性:你可以自定义输出的文件名和路径,并通过重定向将输出和错误输出分别保存。
4、资源友好:相比于其他后台运行的方法(比如守护进程或使用 tmux、screen 等工具),nohup 是一种相对轻量级的方式。
使用步骤:
基础用法:
nohup python your_script.py &
自定义输出文件:
nohup python your_script.py > custom_output.out 2>&1 &
查看运行状态:
ps aux | grep 'your_script.py' # 查找进程ID
终止进程:找到进程ID后,使用 kill [PID] 终止进程
案例一:数据备份
假设你有一个 Python 脚本 backup.py,该脚本会每小时从一个数据库备份数据到另一个位置。由于这是一个持续性任务,我们可以用 nohup 来确保即使在网络不稳定或终端关闭的情况下,备份任务也能继续进行。
nohup python backup.py &
案例二:Web 爬虫
如果你有一个 crawler.py 的爬虫脚本,需要持续地从网站爬取数据,但你不希望它占据你的终端。
nohup python crawler.py > crawler_output.out 2>&1 &
这样即使你退出了终端,爬虫也会持续运行,并将所有输出和错误保存到 crawler_output.out 文件中。
案例三:模型训练
当你需要在远程服务器上训练一个机器学习模型时,通常需要很长的时间。使用 nohup 可以让你安心地关闭终端或断开连接,而不影响模型训练。
nohup python train_model.py > training.log 2>&1 &
注意事项:
1、资源监控:长时间运行的脚本可能会消耗大量资源,务必监控内存和CPU使用情况。
2、错误处理和日志:确保你的 Python 脚本具有异常处理和适当的日志记录功能。
3、权限问题:确保 nohup 命令和 Python 脚本有适当的运行权限。
4、终端交互:nohup 不适用于需要终端交互的脚本。
总结:nohup 是一个在 UNIX 和类 UNIX 系统(包括 Linux 和 macOS)中用于运行不受挂断信号影响的命令的实用工具。通过简单的命令行操作,你可以确保你的 Python 脚本在后台安全、持久地运行。希望通过这篇文章,你已经掌握了如何使用 nohup 来优化你的工作流程。