AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[tail](unix)

Martin Hope
EliiO
Asked: 2024-11-17 09:10:35 +0800 CST

“less” 是否有像“tail”一样的“--retry”选项?

  • 5

我正在使用less来连续跟踪 Squid 日志文件(以及 UFW 日志),命令如下:

less --follow-name -K +F /var/log/squid/access.log

在轮换 Squid 日志时,less会退出。我猜这是因为当重命名旧文件时,新文件不会立即创建,而是会延迟创建,但对于 UFW 日志文件来说,这种情况不会发生,并且less 会成功切换到新文件。

那么,有没有方法或选项可以让less等待新文件出现?

tail
  • 1 个回答
  • 70 Views
Martin Hope
Mike Rapsen
Asked: 2023-10-26 18:06:36 +0800 CST

如何在多个文件中持续跟踪关键字并在每个报告行的开头包含文件名

  • 6
tail -f a/b/c.log d/e/f.log

像这样的日志:

==> a/b/c.log <==
xxx
yyy
Exception happened 1
zzz

==> d/e/f.log <==
rrr
Exception happened 2
sss

如何更改命令以便像这样拾取包含“Exception”的行:

a/b/c.log: Exception happened 1
d/e/f.log: Exception happened 2

该解决方案可以使用任何 Linux 命令。

tail
  • 1 个回答
  • 41 Views
Martin Hope
leeand00
Asked: 2022-05-03 20:20:21 +0800 CST

我可以将实时数据从 postgresql 的 \watch 命令传送到另一个命令吗?

  • 0

我想将来自 psql 的实时数据通过管道传输到另一个命令中,以便通过 shell 进行监控。

这可以做到吗?

到目前为止,我有以下内容:

$ psql bareos -c '\watch (SELECT * FROM log ORDER BY time DESC LIMIT 200) TO STDOUT WITH CSV' 

我正在使用 postgres 11.12。

但是当我运行命令时,我最终得到了错误:

\watch cannot be used with an empty query

然而,如果我直接从 psql 运行它,它完全能够观看实时输出。

我的目标是实现输出的 unix 风格的拖尾。

pipe tail
  • 1 个回答
  • 146 Views
Martin Hope
BlueRoyale
Asked: 2019-06-29 10:15:36 +0800 CST

尾找到或超时的日志 util 关键字

  • 5

我正在使用一种特殊的方式,可以让我访问谷歌。现在页面中的情况非常不同......所以我可以正常编辑问题并评论答案。我删除了更多早期的讨论并直奔主题。

当为脚本找到关键字以执行下一个命令时,我想停止拖尾并返回 0。如果一分钟后没有找到关键字,则整个脚本将停止并返回错误代码。我用set -euxo pipefail的是必要的。

timeout 1m tail -Fn 0 --pid=$(ps -ef | grep "sed /$keywords" | grep -v grep | awk '{print $2}') $log_file | sed "/$keywords/q"

当我测试时,我之前使用的上面的命令很好。但在 Jenkins 中,有时它会在找到关键字时返回“构建步骤‘执行 shell’标记构建为失败”。

当我手动重新启动程序时,我找到了原因。它返回代码 141。所以我查找了代码,发现它与http://www.pixelbeat.org/programming/sigpipe_handling.htmltail -f中的管道|相关。


为了我的目的,我修改了其他问题中的命令。除了“tail -Fn 0 balabala.log”仍然留在后台,它似乎很好,几分钟后消失了。但它离目标最近。

{ sed /"$keywords"/q; kill -13 $!; } < <(exec timeout 1m tail -Fn 0 $log_file)

这超出了我的理解……我查了用法,但仍然不确定。

  1. 我改为kill -s PIPE "$!"缩短kill -13 $!脚本。
  2. 我仍然对{ } < <(). 它们对我来说就像陌生的词......
  3. 可以exec删除吗?好像和不写不一样。
  4. tail后台有什么问题?如果我同时启动多个程序会不会很危险?

这是詹金斯的日志:

......
+ keywords='cloud-service-notice has been started successfully'
+ log_file=/data/jars/logs/info.cloud-service-notice.log
+ cd /data/jars/cloud-service-notice
+ nohup java -jar /data/jars/cloud-service-notice/cloud-service-notice.jar --spring.profiles.active=test
+ sed '/cloud-service-notice has been started successfully/q'
++ exec timeout 1m tail -Fn 0 /data/jars/logs/info.cloud-service-notice.log
2019-07-02 10:31:12,544 [main] INFO  o.s.c.a.AnnotationConfigApplicationContext.prepareRefresh[588] - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@54a097cc: startup date [Tue Jul 02 10:31:12 CST 2019]; root of context hierarchy
......
2019-07-02 10:31:33,860 [main] INFO  c.enneagon.service.notice.NoticeApp.main[24] - cloud-service-notice has been started successfully
+ kill -13 20021
+ ssh web01 'cd /data/releases/cloud-service-notice/20190702-104108/.. &&' 'ls -1 | sort -r | awk '\''FNR > 20  {printf("rm -rf %s\n", $0);}'\'' | bash'
Finished: SUCCESS

进程 20021 是timeout 1m tail -Fn 0 balabala.log. 脚本完成后,进程 20023tail -Fn 0 balabala.log仍然存在,几分钟后消失。

[root@web01 scripts]# ps -ef | grep notice
root     20020     1 27 10:41 ?        00:01:07 java -jar /data/jars/cloud-service-notice/cloud-service-notice.jar --spring.profiles.active=test
root     20023     1  0 10:41 ?        00:00:00 tail -Fn 0 /data/jars/logs/info.cloud-service-notice.log
root     20461 18966  0 10:45 pts/1    00:00:00 grep --color=auto notice

我会用这个命令回答我的问题,但我不确定。我在本地机器上进行了测试,并将其放在我们的生产环境中进行进一步测试。


经过多次测试,我终于将命令更改为:

{ sed /"$keywords"/q; kill $!; } < <(exec timeout 1m tail -Fn 0 $log_file)

-13只是被删除。tail -Fn 0 balabala.log这就是留下来的原因。我可以大致回答上面的四个问题:

  1. kill -15更好,因为我timeout在这个命令中添加了。$!是 的 pid timeout。tail -Fn 0 balabala.log这里是一个子进程,使用默认数字 15 可以杀死它。
  2. 它只是一个进程替换和多个进程使用{...}. 我什至可以忽略kill,因为 1 分钟后timeout会在后台杀死自己。所以这个没有kill的命令仍然是可以接受的:sed /"$keywords"/q < <(exec timeout 1m tail -Fn 0 $log_file). 在这种情况下,它将始终返回 0。
  3. 最好别。执行命令时会显示两个上层进程。不过完成后就没事了。
  4. 原因在上面的“1”中。timeout被杀,tail却被留下。
sed tail
  • 3 个回答
  • 758 Views
Martin Hope
user264359
Asked: 2019-06-19 19:47:48 +0800 CST

仅尾最新数据,而不是上一个

  • 2

我注意到,当我使用 时tail -F,我仍然会在几分钟前生成一个日志。

当前日期和时间

user@svr01:~$ date
Wed Jun 19 00:39:52 +08 2019

tail -F显示几分钟前的数据date

user@svr01:~$ tail -F /var/log/syslog
Jun 19 00:34:26 svr01 systemd[1]: isc-dhcp-server6.service: Main process exited, code=exited, status=1/FAILURE
Jun 19 00:34:26 svr01 systemd[1]: isc-dhcp-server6.service: Failed with result 'exit-code'.
Jun 19 00:34:56 svr01 systemd-networkd-wait-online[1485]: Event loop failed: Connection timed out
...

在这种情况下是否可以仅在当前日期和时间之后查看日志Wed Jun 19 00:39:52 +08 2019,而不是在此之前?

tail
  • 1 个回答
  • 40 Views
Martin Hope
George Thompson
Asked: 2019-06-07 00:49:05 +0800 CST

“tail”正在返回错误的请求数行

  • 0

我正在尝试使用以下方法对手册的输出进行子集化:

man dig | nl | tail -n +389 | head -n 6

但是,输出从第 304 行开始,而不是第 389 行。做一些研究,似乎标记为“#####################”的行不计算在内。这非常令人恼火,我目前的一本书正在使用这种方法来子集数行。

有什么解决方案可以修复被忽略的线条吗?

tail text
  • 1 个回答
  • 275 Views
Martin Hope
Alexander Mills
Asked: 2019-06-05 09:25:48 +0800 CST

如何在不等待的情况下使用命名管道

  • 7

如果命名管道中没有任何内容,我会这样做:

cat my_named_pipe

它将等到数据到达。如果没有要读取的数据,是否可以使用标志立即退出?或者也许是我可以使用的 cat 以外的命令?

我也试过:

read val < "$my_named_pipe";

但这也会等待下一个数据块——如果 fifo 为空,我不想等待。

tail cat
  • 2 个回答
  • 3117 Views
Martin Hope
Momonga
Asked: 2019-05-14 17:29:45 +0800 CST

编写一个 Shell 脚本来拖尾和 gzip 一个日志文件

  • 1

我正在尝试制作一个脚本,可以将日志文件从远程服务器拖到我的本地目录。tail -F是我正在使用的,但是在使用gzip管道后,尽管创建了日志文件的本地副本,但什么也没有发生。

更新:脚本运行但无法到达 gzip 命令,因为我必须键入 ctrl+c 才能结束拖尾。因此,它甚至没有压缩它就结束了脚本。

to_Tomcat(){
        # tail log file -> zips it using gzip 
        tail -F /sampleRemoteDirectory/logs/tomcat/sample.log > "$TomcatLogFileName"-Tomcat.log | gzip "$TomcatLogFileName"-Tomcat.log
        echo ""
        echo "...tailing the log file and saving it as $TomcatLogFileName-JBoss.log.gz"
        echo ""
    }

to_Tomcat TomcatLogFileName
                sleep 10            
ret=$?

# last note before the user has to exit the shell script

echo ""
echo "Saved file: $TomcatLogFileName-Tomcat.log.gz"
shell-script tail
  • 1 个回答
  • 812 Views
Martin Hope
Badr Elmers
Asked: 2019-04-24 16:11:06 +0800 CST

如果“读取时”可以打开“文件描述符”,为什么我需要“执行”

  • 2

我想使用 bash、tail 和使用不同的文件描述符逐行读取文件。所有指南都使用此方法:

方法一:

echo 1111111 > z.txt
exec {newFD}< <(tail -f -c +0 "z.txt")

while IFS= read -r LINE0 <&${newFD}
do
    printf '%s' "$LINE0"
done

但这种方法也有效:

方法二:

echo 1111111 > z.txt
while IFS= read -r LINE0 <&${newFD}
do
    printf '%s' "$LINE0"
done {newFD}< <(tail -f -c +0 "z.txt")

使用第二种方法有什么问题吗?

为什么我不需要exec第二种方法?谢谢你。


{newFD} 自动给了我一个免费的文件描述符:自 bash 4.1+ (2009-12-31)  {varname} 样式自动文件描述符分配以来可用的功能

bash tail
  • 1 个回答
  • 358 Views
Martin Hope
SebMa
Asked: 2019-04-06 16:26:25 +0800 CST

如何防止/保持 tail 将 \r 替换为 \n

  • 1

当我在背景中播放带有 mpv 的视频时,我得到了这个:

$ tail -f nohup.out 
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
 (+) Video --vid=1 (*) (h264 1266x720 30.000fps)
 (+) Audio --aid=1 (*) 'DASH audio' (aac 1ch 48000Hz) (external)
File tags:
 Artist: TBN
 Date: 20180113
 Title: Joseph Prince joins Matt & Laurie TONIGHT on PRAISE... watch NOW!
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 1266x720 yuv420p
AV: 00:00:00 / 00:56:50 (0%) A-V:  0.000
AV: 00:00:00 / 00:56:50 (0%) A-V:  0.000
AV: 00:00:00 / 00:56:50 (0%) A-V:  0.000
... # THERE ARE QUITE A LOT OF LINES
AV: 00:00:03 / 00:56:50 (0%) A-V:  0.000
AV: 00:00:03 / 00:56:50 (0%) A-V:  0.000
Saving state.


Exiting... (Quit)
^C

但我希望有这个输出(就像我在没有 的情况下播放文件时一样nohup):

$ mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
 (+) Video --vid=1 (*) (h264 1266x720 30.000fps)
 (+) Audio --aid=1 (*) 'DASH audio' (aac 1ch 48000Hz) (external)
File tags:
 Artist: TBN
 Date: 20180113
 Title: Joseph Prince joins Matt & Laurie TONIGHT on PRAISE... watch NOW!
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 1266x720 yuv420p
AV: 00:00:03 / 00:56:50 (0%) A-V:  0.000
Saving state.


Exiting... (Quit)

EDIT1:我使用 tty like /dev/pts/2,因此如果我键入stty inlcr它应该会影响当前的 tty。

我仍然得到相同的混乱输出tail -f nohup.out

EDIT2:根据@mosvytail的说法,这不是罪魁祸首,而是mpv。

我想出了一种方法来对mpv's进行 S&R stderr:

$ mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/ 2>&1 | perl -p -e '$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/' | tee mpv_all.log
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
 (+) Video --vid=1 (*) (h264 634x360 30.000fps)
 (+) Audio --aid=1 (*) (aac 1ch 48000Hz)
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 634x360 yuv420p
AV: 00:00:08 / 00:56:50 (0%) A-V:  0.000 Cache: 1024s+86MB
Saving state.
[ffmpeg] https: Will reconnect at 63421312 in 0 second(s), error=End of file.


Exiting... (Quit)

编辑 3:@mosvy 谢谢,它现在可以工作了:

$ nohup sh -c ' mpv --no-resume-playback https://www.facebook.com/TBN/videos/1580372468665943/ 2>&1 | perl -p -e '\''$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/'\'' ' &
$ tail -f nohup.out
Playing: https://www.facebook.com/TBN/videos/1580372468665943/
 (+) Video --vid=1 (*) (h264 634x360 30.000fps)
 (+) Audio --aid=1 (*) (aac 1ch 48000Hz)
AO: [pulse] 48000Hz mono 1ch float
VO: [gpu] 634x360 yuv420p
AV: 00:00:08 / 00:56:50 (0%) A-V:  0.000 Cache: 1767s+147MB
Saving state.
[ffmpeg] https: Will reconnect at 103693952 in 0 second(s), error=End of file.


Exiting... (Quit)
^C

编辑 4:感谢@jw013 的另一个解决方案:

export perl_script='$| = 1;s/\n/\r/g if $_ =~ /^AV:/;s/Saving state/\nSaving state/'
mpv="command mpv"
args=("$@")
nohup sh -c "$mpv ${args[*]} 2>&1 | perl -p -e '$perl_script' | tee ~/mpv_all.log" &

我怎样才能做到这一点 ?解决了 !

linux tail
  • 1 个回答
  • 331 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve