如何kill掉后台中的tail -f
目前有个脚本如下
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
感谢邀请,两个思路:
记录下tail的进程号,比如
(tail -f access.log & echo $! > pid) | python parse.py
,这样pid里面就有tail的进程号了,后面你懂的在python代码里面去tail,比如用subprocess来调,或者自己实现一个简单的tail -f
使用
tail -F
,不用去杀进程了。参考: How to do a
tail -f
of log rotated files?好奇的问下 tail -f的目的是什么?
你既然已经说了每天会分割一次,看你的描述这个parse.py脚本也是一次性执行完毕关闭时最好的结果
所以你直接tail accesss.log 以后直接管道发给parse.py脚本就可以了
tail access.log | python parse.py
也不用那么麻烦要配合nohup和kill来杀进程,而是parse.py执行完毕,会自动退出