Bash:远程执行脚本,在终端上显示少量日志,并将其余日志重定向到日志文件

时间:2018-04-20 03:26:23

标签: bash

我有一个案例,我想远程运行bash脚本。该bash脚本打印一些日志。我想在屏幕上只显示几个日志,并将其余日志移到日志文件中。日志文件存在于远程执行bash脚本的主机上。 例如, 我有2台主机A和主机B.主机A上有以下脚本

echo  "Executing the script on $(hostname) at $(date)" # <<<< I want this log in log file
echo -n "[Info] Importing docker images from tar files ..." # <<<< I want this log on terminal
for file_path in $tar_file_paths
do
   cat ${file_path} | docker import - ${file_path}:${tag}
   if [[ $? -ne 0 ]]; then
      echo "[Error] Failed to import ${file_path}
      exit 1
   fi
   echo -n "." # <<<< I want this log on terminal
done
echo " [Done]" # <<<< I want this log on terminal

echo  "Done with executing the script on $(hostname) at $(date)" # <<<< I want this log in log file

我正在将脚本从主机A传输到主机B并执行它,如下所示,

ssh -i /home/centos/.ssh/id_rsa centos@192.168.235.10:/tmp/test-script.sh

上面的命令再次成为某些脚本的一部分。执行上面的命令后,我想在终端

上执行以下操作
[Info] Importing docker images from tar files .................... [Done]

对于脚本中显示的其余日志,我希望它们位于主机A上的某个日志文件中。

我尝试过的一种方法就是在主机B上维护一个临时日志文件,一旦脚本完成,然后将主机B中的临时日志文件的内容附加到主机A上的主日志文件中。在这种情况下,我重定向我不想在终端上显示的日志到临时日志文件。 但是,这有点不适合我的用例。当远程执行发生时,我将使用尾部和主日志文件监视主日志文件,就像挂起一样。

1 个答案:

答案 0 :(得分:0)

仅将输出发送到文件:

echo foo >> my.log

将输出发送到文件并同时显示:

echo foo | tee -a my.log

只显示输出:

echo foo