我正在运行以下命令:
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 中的一些行写入日志文件以及打印在控制台上。我尝试了以下链接中的不同方法,但似乎没有任何效果。我该怎么做?
将 stdout 的 COPY 重定向到 bash 脚本本身的日志文件
nohup myscript.sh &> file.log | tail -f file.log &
上面的命令有效,但它会打印所有行并完全填充终端。
我只需要将 myscript.sh 和/或 script_A.sh 中的特定行打印在控制台上,这样用户就不需要总是打开日志文件来了解状态。 (目前,status_bar $! 输出在 nohup 日志文件中打印,但不在终端中打印。我需要在使用 nohup 命令运行时在终端中打印此功能 status_bar $! 输出)。提前致谢。
这是一种完全可定制的方法,适用于正在运行的每个作业。
建议改编你的剧本:
#!/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