查看 Linux 中的实时日志

查看 Linux 中的实时日志

我想要查看脚本中使用的日志文件中的实时日志。

我有一个脚本,它与 CISCO VPN 服务器建立 VPN 连接,然后将文件复制到远程位置。为了获得已发送文件的列表,在我的 VPN 复制脚本中,我还制作了日志文件,并且日志文件位置在目录中tmp。我的VPN copy script工作真的很好,没有任何问题。

但现在我想做的是运行这个命令

watch tail -n 15 /tmp/vpn.log
tail -f /tmp/vpn.log

通过终端并希望查看日志文件的实时日志,并且在此日志文件中,我将看到有关文件传输到远程位置的信息。但我的问题是当我运行

watch tail -n 15 /tmp/vpn.log
tail -f /tmp/vpn.log 

这些命令,然后运行我的脚本,然后我的文件不会传输到远程位置,当我没有tail在日志文件上运行命令时,我的VPN copy script工作没有任何问题。

所以基本上我希望能够查看实时日志并且我vpn copy script也可以工作。

有人可以帮帮我吗 ?

谢谢

答案1

在脚本中运行watch tail -n 15 /tmp/vpn.log/将停止其执行,因为在执行/时shell 正忙于运行/本身;tail -f /tmp/vpn.logwatch tail -n 15 /tmp/vpn.logtail -f /tmp/vpn.logwatch tail -n 15 /tmp/vpn.logtail -f /tmp/vpn.log

通常,解决方案可以是将进程作为后台作业运行,或者以任何方式独立于当前 shell 运行该进程,但是由于您需要查看相关进程的输出,因此一个好的方法是在新实例中运行它gnome-terminal

#!/bin/bash
touch /tmp/vpn.log
gnome-terminal -e 'bash -c "echo $$ > pid; tail -f /tmp/vpn.log"'
echo "Starting to output to /tmp/vpn.log"
echo line1 >> /tmp/vpn.log
sleep 1
echo line2 >> /tmp/vpn.log
sleep 1
echo line3 >> /tmp/vpn.log
kill -15 "$(< pid)"
rm pid
exit 0
  • touch /tmp/vpn.log/tmp:如果不存在则在 中创建一个名为“vpn.log”的长度为 0 的文件,/tmp/vpn.log如果存在则更新 的访问和修改时间;这样做是为了确保tail -f [...]不会因错误而退出;
  • gnome-terminal -e 'bash -c "echo $$ > pid; tail -f /tmp/vpn.log"':生成一个gnome-terminal实例,并在实例内部生成一个bash实例gnome-terminal,将其 PID 输出到名为“pid”的文件中并运行tail -f /tmp/vpn.log
  • kill -15 "$(< pid)"bash:向实例内部运行的实例发送SIGTERM信号gnome-terminal
  • rm pid:删除“pid”;

截屏

相关内容