nohup 命令本身不直接支持日志格式自定义,但可以通过一些技巧和方法实现类似效果。以下是几种实现 nohup 日志自定义格式的方法:
nohup your_command | awk '{print strftime("[%Y-%m-%d %H:%M:%S]"), $0}' > custom.log 2>&1 &
这个命令会: 1. 执行 your_command 2. 通过 awk 添加时间戳前缀 3. 将标准输出和错误输出都重定向到 custom.log
nohup your_command | while read line; do logger -t "MyApp" "$line"; done &
这样日志会被记录到系统日志中,可以使用 syslog 的配置来定义格式。
创建一个包装脚本 run_with_logging.sh
:
#!/bin/bash
LOG_FILE="custom.log"
TIMESTAMP=$(date +"[%Y-%m-%d %H:%M:%S]")
exec >> "$LOG_FILE" 2>&1
while IFS= read -r line; do
echo "$TIMESTAMP $line"
done < <(your_command)
然后使用 nohup 运行这个脚本:
nohup ./run_with_logging.sh &
考虑使用更专业的日志工具如 multilog (来自 daemontools) 或 svlogd (来自 runit):
nohup your_command | multilog t s1000000 n10 ./logs &
如果系统使用 systemd,可以创建服务单元文件来更好地控制日志格式:
[Unit]
Description=My Custom Service
[Service]
ExecStart=/path/to/your_command
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
然后在 /etc/rsyslog.d/ 中配置自定义格式。
希望这些方法能帮助你实现 nohup 日志的自定义格式需求!