在使用 nohup 运行程序时,默认日志(如 nohup.out)不会自动带时间戳。要实现“日志带时间”,常见有以下几种做法,按推荐程度从易到难说明:
date(适合脚本)如果你控制启动命令,可以在输出前加时间:
nohup bash -c 'while true; do echo "$(date "+%Y-%m-%d %H:%M:%S") hello"; sleep 1; done' > nohup.out 2>&1 &
缺点:只能在你自己写输出时加时间。
ts 命令(最推荐 ✅)ts 来自 moreutils,可以给每一行输出自动加时间戳。
# CentOS / RHEL
yum install moreutils
# Ubuntu / Debian
apt install moreutils
nohup your_command | ts >> nohup.log 2>&1 &
示例:
nohup python app.py | ts >> nohup.log 2>&1 &
日志效果:
2026-01-15 10:23:01 start server
2026-01-15 10:23:02 request received
✅ 最干净、最常用
awk 自动加时间(无需安装)如果不想装软件:
nohup your_command 2>&1 | awk '{print strftime("%Y-%m-%d %H:%M:%S"), $0}' >> nohup.log &
stdbuf + ts(防止缓冲导致时间不准)有些程序会缓冲输出,导致时间“批量出现”:
nohup stdbuf -oL -eL your_command | ts >> nohup.log 2>&1 &
如果是你自己的程序:
logging 模块这是生产环境最推荐方式。
| 场景 | 推荐方式 |
|---|---|
| 快速使用 | ts |
| 不能装软件 | awk + strftime |
| 生产环境 | 程序内置日志时间 |
| 脚本简单任务 | date 手动加 |
如果你愿意,可以告诉我:
我可以给你精确命令或配置。