Python 程序后台运行与日志自动管理教程

作者:

本文介绍使用 nohup + tail + logrotate 实现简单稳定的 Python 服务日志管理方案。


一、Python 程序后台运行

普通执行:

python3 app.py

当关闭 SSH 连接后,程序会停止运行。

可以使用 nohup 将程序放到后台运行:

nohup python3 -u app.py > /root/logs/app.log 2>&1 &

如果是uvicorn   不需要 -u 本来就是实时输出的
nohup uvicorn main:app --host 0.0.0.0 --port 8000 > /root/logs/app.log 2>&1 &

参数说明:

参数作用
nohup退出 SSH 后程序继续运行
-uPython 无缓冲模式,日志实时写入
> app.log保存程序输出日志
2>&1错误日志一起写入
&后台运行

其中:

-u

表示 Python 使用 unbuffered(无缓冲)模式

开启后:

  • print() 输出立即写入日志
  • tail -f 可以实时看到最新内容
  • 更适合长期运行的后台任务

二、实时查看运行日志

程序启动后,可以通过:

tail -f /root/logs/app.log

实时查看运行状态。

例如:

正在启动服务...
连接数据库成功
任务执行中...

日志会不断刷新。

退出查看:

Ctrl + C

三、配置日志自动清理

如果程序长期运行:

app.log

会不断增大。

当日志达到几个 GB 时,会占用大量磁盘空间。

可以使用 Linux 自带的 logrotate 自动管理。

创建配置文件:

vim /etc/logrotate.d/app

写入:

/root/logs/*.log {
    daily
    rotate 7
    compress
    missingok
    copytruncate
    dateext
    dateformat -%Y-%m-%d
}

copytruncate 防止 Python 进程还占用旧文件句柄 写入新文件失败 不重启程序切割日志。
每天一个文件最多7天

四、logrotate 配置说明

每天检查日志

daily

每天执行一次日志检查。


限制日志大小

size 100M

当日志超过 100MB 时自动切割。


保留历史日志

rotate 7

最多保留 7 个旧日志:

app.log
app.log.1.gz
app.log.2.gz
...
app.log.7.gz

超过后自动删除。


压缩旧日志

compress

旧日志自动压缩:

app.log.1

↓

app.log.1.gz

减少磁盘占用。


不重启程序切割日志

copytruncate

轮转日志时:

  • 复制旧日志
  • 清空当前日志文件

程序无需停止或重启。

适合:

  • Python 脚本
  • 爬虫程序
  • 后台任务
  • nohup 启动程序

五、测试日志轮转

查看配置是否正确:

logrotate -d /etc/logrotate.d/app

立即执行轮转:

logrotate -f /etc/logrotate.d/app

查看日志目录:

ls -lh /root/logs/

六、完整使用流程

1. 启动 Python 程序

nohup python3 -u app.py > /root/logs/app.log 2>&1 &

2. 查看实时日志

tail -f /root/logs/app.log

3. 自动日志管理

系统每天自动执行:

app.log
      |
      | 超过100MB
      ↓
app.log.1.gz
app.log.2.gz
...
app.log.7.gz

自动保留最近 7 份日志,避免日志无限增长。

七、如何一键重启

kill 是 根据PID查询  pkill是根据 根据进程名/匹配规则搜索(所以最好先ps -ef|grep "xxx"  看一下是不是自己要的进程)

pkill -f "python3 -u app.py"; nohup python3 -u app.py > /root/logs/app.log 2>&1 &


pkill -f "uvicorn main:app"; nohup uvicorn main:app --host 0.0.0.0 --port 8000 > /root/logs/app.log 2>&1 &

总结

通过:

  • nohup 实现 Python 程序后台运行
  • python3 -u 保证日志实时输出
  • tail -f 实时查看运行状态
  • logrotate (log 肉泰特)自动切割和删除日志

可以快速搭建一个简单可靠的 Python 服务运行环境,适合服务器脚本、爬虫、API 服务和定时任务等场景。