我想要查看脚本中使用的日志文件中的实时日志。
我有一个脚本,它与 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.log
watch tail -n 15 /tmp/vpn.log
tail -f /tmp/vpn.log
watch tail -n 15 /tmp/vpn.log
tail -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”;