shell 将使用nohup命令生成的日志文件中的特定行打印到控制台

qmelpv7a  于 2023-03-09  发布在  Shell
关注(0)|答案(1)|浏览(258)

我正在运行以下命令:

nohup myscript.sh &> file.log &

这个过程需要很长时间才能完成。nohup将收集输出和错误并将其写入上面的file.log。
myscript.sh 将在后台进程中激活脚本,如下所示:

# myscript.sh starts here
#!/bin/bash

status_bar(){
printf "["
While kill -0 "$1" 2>/dev/null; do
    printf "-"
    sleep 1
done
printf "] done!"
}

pid=()
for i "${array[@]}"; do
     echo starting process for "$i"
     script_A.sh "$i" &
     status_bar $!   # I need to print this funtion output in the terminal while running with nohup command
     pid="$!"
done

for id in ${pid[*]}; do
    wait $id
done

echo print its done

我需要myscript.sh和/或script_A.sh中的一些行写入日志文件并打印在控制台上。我尝试了以下链接中的不同方法,但似乎没有任何效果。我该如何做到这一点?
redirect COPY of stdout to log file from within bash script itself
How to redirect output of an entire shell script within the script itself?
Redirect to stdout in bash
using nohup -> output to file and console

nohup myscript.sh &> file.log | tail -f file.log &

上面的命令可以工作,但是它打印所有行并完全填充终端。
我只需要myscript.sh在控制台上打印www.example.com和/或script_A.sh中的特定行,这样用户就不需要总是打开状态日志文件。(目前,status_bar $!输出在nohup日志文件中打印,但不在终端中打印。我需要在运行nohup命令时在终端中打印此函数status_bar $!输出)。提前感谢。

l2osamch

l2osamch1#

这里有一种方法,它可以根据正在运行的每个作业进行完全定制。

建议改编您的脚本

#!/bin/bash

pid=""
for i in "${array[@]}"
do
     echo starting process for "$i"
     script_A.sh "$i" &
     pid="$!"

     ### ActionForProcess_${i} must know names of specific output files
     ###    from "script_A.sh ${i}" to parse for meaningful messages. 
     nohup ( wait ${pid} ; "actionForProcess_${i}" ) &
done

echo print its done

相关问题