有人可以提供任何想法,我如何将数据从 nc 传输到 sed(或 awk 或其他任何东西)并在每行之后评估并写入文件时间戳?我有的:
# cat /etc/systemd/system/ncserver.service
[Unit]
Description=netcat listener
After=network.target
[Service]
Restart=always
RestartSec=1
ExecStart=/usr/bin/bash -c '/usr/bin/nc -n -v -l -k -p 1313 >> /opt/data/$(hostname)-$(date -u +%%y%%m%%d-%%H).txt'
[Install]
WantedBy=multi-user.target
简单的侦听器 - 通过原始 tcp 接收文本,发送到文件中(每天由 cron 重新启动一次以生成新文件)
我想将当前时间戳附加到每一行文本(在行的开头或结尾,没关系)。尝试过 sed、awk,但问题是我无法评估date
每一行 - 它仅在服务启动时评估一次。看起来像这样
109582 ? Ss 0:00 /usr/bin/bash -c /usr/bin/nc -n -v -l -k -p 1313 | /usr/bin/sed 's/^/'$(date +%s)
109583 ? S 0:00 /usr/bin/nc -n -v -l -k -p 1313
109584 ? S 0:00 /usr/bin/sed s/^/1617555467\;/g
管道可能根本不是答案,但我有点受到 bash 的限制。有任何想法吗?..
这听起来很像syslog所做的。您也许可以用pysyslog
nc
之类的东西替换,并让它捕获套接字上的文本并附加日期。sed
每次运行脚本时都无法一次又一次地运行命令(好吧,GNUsed
有/e
执行此操作的标志,但它通常不是可移植的)因此您可能应该切换到执行此操作的工具。那里的引用令人讨厌,以至于您可能希望将命令行保存在单独的脚本中,然后将其路径作为
ExecStart
. 例如,如果您将其保存在/usr/local/bin/dump1313
这个文件,然后
chmod a+x
你可以简单地把(这里没有特定于 Bash 的命令,所以我放了
#!/bin/sh
代替#!/usr/bin/bash
或者你有什么。)运行
tr
以摆脱线路终结者date
仍然是一个缺点。如果你想让这个自包含和资源高效,也许创建一个简单的 C 包装器,它为它读取和打印的每一行添加一个时间戳......或者如果 C 太具有挑战性,则使用 Python: