相关疑难解决方法(0)

Bash脚本并行处理有限数量的命令

我有一个看起来像这样的bash脚本:

#!/bin/bash
wget LINK1 >/dev/null 2>&1
wget LINK2 >/dev/null 2>&1
wget LINK3 >/dev/null 2>&1
wget LINK4 >/dev/null 2>&1
# ..
# ..
wget LINK4000 >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

但是处理每一行直到命令完成然后移动到下一行是非常耗时的,我想一次处理20行,然后当它们完成另外20行处理时.

我想把wget LINK1 >/dev/null 2>&1 &命令发送到后台然后继续,但这里有4000行,这意味着我会遇到性能问题,更不用说我应该同时启动多少个进程,所以这不是一个好的理念.

我现在想到的一个解决方案是检查其中一个命令是否仍在运行,例如在20行后我可以添加此循环:

while [  $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
Run Code Online (Sandbox Code Playgroud)

当然,在这种情况下,我需要追加到行尾!但我觉得这不是正确的做法.

那么我如何实际将每20行组合在一起并等待它们完成,然后再转到接下来的20行,这个脚本是动态生成的,所以我可以在生成它的时候做我想要的任何数学运算,但它没有必要使用wget,这只是一个例子,所以任何特定于wget的解决方案都不会给我任何好处.

linux bash shell

186
推荐指数
4
解决办法
20万
查看次数

获取后台进程的退出代码

我有一个命令CMD从我的主要bourne shell脚本调用,需要永远.

我想修改脚本如下:

  1. 并行运行命令CMD作为后台进程($ CMD&).
  2. 在主脚本中,每隔几秒就有一个循环来监视生成的命令.该循环还将一些消息回显到stdout,指示脚本的进度.
  3. 当生成的命令终止时退出循环.
  4. 捕获并报告生成进程的退出代码.

有人能指点我完成这个吗?

unix linux shell process

112
推荐指数
6
解决办法
13万
查看次数

使用最大进程数并行化Bash脚本

可以说我在Bash中有一个循环:

for foo in `some-command`
do
   do-something $foo
done
Run Code Online (Sandbox Code Playgroud)

do-something是cpu绑定,我有一个漂亮闪亮的4核处理器.我希望能够一次跑到4 do-something岁.

天真的做法似乎是:

for foo in `some-command`
do
   do-something $foo &
done
Run Code Online (Sandbox Code Playgroud)

这将运行所有 do-something s的一次,但有几个缺点,主要是做多岁的也有一些显著I/O执行其全部一次可能会慢一点.另一个问题是这个代码块立即返回,所以当所有的do-somethings完成时,没办法做其他工作.

你怎么写这个循环所以总是有X do-something一次运行?

bash

83
推荐指数
8
解决办法
4万
查看次数

Bash中的多线程

我想在我的shell脚本中介绍多线程功能.

我有一个脚本,read_cfg()用不同的参数调用该函数.每个函数调用都是独立的.

是否可以并行地实例化这些函数调用(而不是脚本).请让我怎样才能实现这一目标..?

linux bash shell multithreading

74
推荐指数
3
解决办法
10万
查看次数

并行bash脚本运行多个脚本

我有一个bash脚本,其中包含串行运行的其他脚本.但是,运行它们需要相当长的时间.有没有办法并行运行这些脚本以提高整体性能?它们彼此独立.

它看起来类似于:

#!/bin/bash

#some code here
cppcheck.sh
churn.sh
run.sh
Run Code Online (Sandbox Code Playgroud)

更新:

**git log --pretty=format: --numstat | perl -ane'$c{$F[2]} += abs($F[0]+$F[1]) 
if $F[2];END {print "$_\t$c{$_}\n" for sort keys %c}' > ${OUTPUT_DIR}/churn.txt**
sed -i -e '/deps/d;/build/d;/translations/d;/tests/d' -e 30q ${OUTPUT_DIR}/churn.txt
sort -r -n -t$'\t' -k2 ${OUTPUT_DIR}/churn.txt -o ${OUTPUT_DIR}/churn.txt
echo "set term canvas size 1200, 800; set output '${OUTPUT_DIR}/output.html'; 
unset key; set bmargin at screen 0.4; set xtics rotate by -90 scale 0,0; 
set ylabel 'Number of lines changed (total)'; set title 'Files with high …
Run Code Online (Sandbox Code Playgroud)

parallel-processing bash

48
推荐指数
1
解决办法
6万
查看次数

从脚本执行后台执行shell命令

如果命令在字符串中,如何在bash脚本中在后台执行shell命令?

例如:

#!/bin/bash
cmd="nohup mycommand";
other_cmd="nohup othercommand";

"$cmd &";
"$othercmd &";
Run Code Online (Sandbox Code Playgroud)

这不起作用 - 我怎么能这样做?

unix bash shell

45
推荐指数
2
解决办法
11万
查看次数

同时运行三个shell脚本

我有三个shell脚本,我运行如下 -

sh -x script1.sh

sh -x script2.sh

sh -x script3.sh
Run Code Online (Sandbox Code Playgroud)

因此,在前一个脚本完成执行之后,每个脚本一次一个地执行.

问题陈述:-

有什么办法可以从一个窗口同时执行上述三个脚本吗?我只想同时执行script1,script2,script3.如果你想到一些CRON JOB调度script1 at 3 AM, script2 at 3AM, script3 at 3AM(同时所有三个脚本,同时).这就是我需要的,我需要同时执行所有三个脚本.

bash shell

18
推荐指数
3
解决办法
5万
查看次数

Next.js 启动应用程序时运行函数/脚本

我有一个(服务器端)函数,我想在第一次启动我的 next.js 服务器时运行。通常我会做这样的事情在我的package.json脚本定义:node ./path/to/script.js && next start。但是有问题的脚本从“webpacked”代码中导入了几个资源,所以这并不容易。(我知道可以使用 开启 node.js 中的 es6 支持--experimental-modules,但这会带来它自己的问题,我宁愿不去那个兔子洞)

到目前为止,我拥有的最佳解决方案是创建一个 api 端点来运行这些脚本,然后在启动后手动点击该端点。但是这样做似乎是一种黑客行为,如果有人发现它,这个端点可能会被用于某种 DoS 攻击。

有没有更好的解决方案,只允许在应用程序启动时注册要运行的函数/回调?我认为可能的位置是next.config.js,但我在可能的设置列表中看不到任何可能的内容。

javascript next.js

15
推荐指数
1
解决办法
2270
查看次数

Bash linux:并行启动多个程序,并在完成后停止所有程序

我正在研究Ubuntu,我想创建一个执行以下操作的bash文件:
在核心上启动一个程序(prog0)1.
等待3秒钟.
然后记录prog0的CPU和内存使用情况信息(我在核心0上使用两个pidstat实例来记录该信息).
然后在核心0上启动另一个程序(prog1).
当prog1完成时(我认为prog1自动退出),我想退出所有前一个进程(prog0和两个pidstat).

taskset -c 1 prog0 -option0 &
sleep 3
taskset -c 0 pidstat 1 -C prog0 -u > log2 &
taskset -c 0 pidstat 1 -C prog0 -r > log3 &
taskset -c 0 prog1 -option1 > log1 
Run Code Online (Sandbox Code Playgroud)

我不知道如何退出或杀死prog1完成后启动的所有进程.

linux bash

5
推荐指数
1
解决办法
2817
查看次数

如何在一个接一个的文件夹中运行多个python文件

我有大约20个python文件.

每次我在终端上运行这些文件时,这个表格一个接一个:

python a.py
python b.py
python c.py
python d.py
python e.py
python f.py
python g.py
.
.
.
Run Code Online (Sandbox Code Playgroud)

(我在这里提供了一般文件名)

这个过程需要很多时间.

是否可以通过任何脚本一个接一个地运行这些文件..?

如果可能,那怎么......?

请尽可能提供代码......

我通过几个网站了解到,使用bash脚本我们可以做到这一点..

我不知道如何实现它.

如果您可以建议任何其他方法,即使这将有所帮助.

编辑:

我需要使用nosetests为每个文件生成报告.

我使用nosetests面临的问题是,它创建了一个带有名称的HTML文件results.html.

每次创建报告时,最新的HTML文件都会替换旧的HTML文件.因为名字是一样的.

所以我现在正在做的是,每次运行一个python文件的nosetests时重命名报告.运行nosetests获取第二个文件,生成报告并重命名..它继续...

如果有人能告诉我如何克服这个问题,那会有所帮助..

我正在研究Ubuntu 14.04

python nose

5
推荐指数
2
解决办法
1万
查看次数