温馨提示×

怎样让nohup日志带时间

小樊
49
2026-09-09 12:32:52
栏目: 编程语言

在使用 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,可以给每一行输出自动加时间戳

1. 安装

# CentOS / RHEL
yum install moreutils

# Ubuntu / Debian
apt install moreutils

2. 使用

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 &

五、在程序内部加日志时间(最规范)

如果是你自己的程序:

  • Python:logging 模块
  • Java:logback / log4j
  • Go:log 包

这是生产环境最推荐方式


总结推荐

场景 推荐方式
快速使用 ts
不能装软件 awk + strftime
生产环境 程序内置日志时间
脚本简单任务 date 手动加

如果你愿意,可以告诉我:

  • 用什么语言(Python / Java / Shell)
  • 是否是后台服务
  • 日志格式要求(秒 / 毫秒 / ISO)

我可以给你精确命令或配置

0