【问题标题】:Bash Jobs : how can I output job process information along with errors?Bash Jobs:如何输出作业过程信息以及错误?
【发布时间】:2020-12-14 11:09:05
【问题描述】:

我正在使用 bash 脚本将一些数据导入 MySQL 数据库。我正在使用...中的作业并行化负载

for i in  *.sql; do
    {    
      echo "importing $i"
      mysql --defaults-extra-file=my.cnf < $i
      echo "$i load complete 
      
      } &
    
done

如果其中一个作业出错,我会在标准输出中看到该错误,但无法确定是哪个作业导致了它。有没有办法将作业过程信息添加到错误输出中,所以我是哪一个?

【问题讨论】:

  • 如果您看到 importing .....sql 然后出现错误消息,您知道这是导入消息中的 sql 文件吗?
  • @AndrewPoodle :我会将作业的输出重定向到文件并将文件 ID 合并到文件名中。由于您在后台运行复合命令,因此让标准输出滑出无论如何都是个坏主意。
  • 可以用sed命令| sed -e "s/^/$i:/"
  • 2&gt;&amp;1 | sed -e "s/^/$i:/",将stderr添加到管道(在右大括号后添加)

标签: bash error-handling stdout jobs


【解决方案1】:

你可以试试GNU Parallel:

parallel --progress --tag 'mysql --defaults-extra-file=my.cnf < {}' ::: *.sql > import.log

这将并行运行mysql --defaults-extra-file=my.cnf 的次数与当前目录中的.sql 文件一样多。您可以使用--jobs 选项来决定最大并行进程数。

--tag 选项为每个输出行加上正在处理的文件的前缀。输出被重定向到一个文件以供进一步参考,--bar 选项显示一个视觉反馈的进度条。

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2022-07-26
    • 2015-03-29
    • 2023-04-11
    • 1970-01-01
    • 2016-02-16
    相关资源
    最近更新 更多