如何kill掉后台中的tail -f

发布于 2022-09-03 11:29:14 字数 588 浏览 20 评论 0

目前有个脚本如下

tail -f access.log | python parse.py

但由于access.log是自动按天分割的,所以上面这个命令得每天重新跑一次
于是写到crontab中

0 0 * * * tail -f access.log | python parse.py

其中的Python脚本可以改写成到时间自动结束,但tail -f就不知道怎么退出了

之后又改写成shell脚本

#!/bin/sh
nohup tail -f access.log | python parse.py &
pid=$!
sleep 86400
kill $pid

再写到crontab中

0 0 * * * /path/to/shell_script

但似乎上面shell脚本中的pid只是拿到了管道最后一个命令的pid,也就是说只kill掉了python parse.py,最后变成了僵尸进程。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

完美的未来在梦里 2022-09-10 11:29:14

感谢邀请,两个思路:

  1. 记录下tail的进程号,比如(tail -f access.log & echo $! > pid) | python parse.py,这样pid里面就有tail的进程号了,后面你懂的

  2. 在python代码里面去tail,比如用subprocess来调,或者自己实现一个简单的tail -f

陌若浮生 2022-09-10 11:29:14

使用 tail -F,不用去杀进程了。

   -f, --follow[={name|descriptor}]
          output appended data as the file grows;

          an absent option argument means 'descriptor'

   -F     same as --follow=name --retry
   

参考: How to do a tail -f of log rotated files?

审判长 2022-09-10 11:29:14

好奇的问下 tail -f的目的是什么?

你既然已经说了每天会分割一次,看你的描述这个parse.py脚本也是一次性执行完毕关闭时最好的结果

所以你直接tail accesss.log 以后直接管道发给parse.py脚本就可以了

tail access.log | python parse.py

也不用那么麻烦要配合nohup和kill来杀进程,而是parse.py执行完毕,会自动退出

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文