管道xargs不执行命令


1

我想监视nginx access.log中是否有格式错误的请求,并将此类情况通知自己。

为此,我编写了以下命令:

tail -n0 -f access.log | grep --line-buffered '\{' | xargs sentry-cly -m

但是由于某种原因,该解决方案不起作用。如果我删除最后一个管道并仅以grep结尾-我将看到输出为日志文件获取新记录。

我不明白为什么不执行xargs。如果用cat或echo替换sentry-cli,它将是相同的。

您能说明为什么我有这种行为吗?

Answers:


1

缺省情况下,xargs收集输入,直到它具有可以安全传递给该实用程序的单次调用(在本例中为sentry-cly -m)之前的数量。这意味着它将等到看到大量日志消息后再运行sentry-cly -m first message second message third message ... thousandth message ...。为了避免这种情况,请使用xargs -L1 sentry-cly -m- -L1告诉它在sentry-cly -m读取的每一行(即每条消息)上运行。

(类似地,xargs -L2 sentry-cly -m将等待直到收到2条消息sentry-cly -m "firstmessage" "secondmessage",然后再运行,然后等待下两条消息。您可以通过运行xargs -L2 echo,然后在其中键入行并观察何时回显什么来看到此消息。)


1

经过一番深入调查,我发现以下解决方案工作: xargs -L 1


1
感谢您关闭问题循环。您能否添加一个句子来解释它的作用并阐明这是否是整个命令?
fixer1234'2013/

戈登(Gordon)已经提供了很好的贴士
pro100sanya
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.