同時カールを実行しようとしましたが、「ホストを確認できません」と簡単に報告されます。カールを並列に実行するには、「並列」を使用します。
parallel :::: ./a.sh ./a.sh
from api server
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16 0 16 0 0 13781 0 --:--:-- --:--:-- --:--:-- 16000
from api server
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16 0 16 0 0 14925 0 --:--:-- --:--:-- --:--:-- 16000
from api server
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16 0 16 0 0 15009 0 --:--:-- --:--:-- --:--:-- 16000
from api server
from api server
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16 0 16 0 0 14324 0 --:--:-- --:--:-- --:--:-- 16000
curl: (6) Could not resolve host: curl
100 16 0 16 0 0 44198 0 --:--:-- --:--:-- --:--:-- 44198
禁煙健康増進協会
#!/bin/bash
curl http://127.0.0.1:81/a.php
a.php
<?php
echo "from some server\n";
4つの同時カールだけでホストが失敗する問題を解決するには?私が経験した元の問題が次に説明されているので、これをシミュレートしています。同時リクエストを行うとphpcurl localhostが遅くなる。同時カールが4つしかないので、これが開かれたファイル制限の問題だとは思いません。なぜこれが起こるのかを説明できる人はいますか?ちなみに、オペレーティングシステムはUbuntu 16.04です。
Rudy Meierは、並列性を使用する正しい方法を提案しました。使用後、yes | head -n4 | parallel ./a.sh
問題はもう存在しません。それでも私の元の問題は残っています。
答え1
--dryrun
GNU Parallelが実行しているものが混乱している場合は、次を試してください。
$ parallel --dryrun :::: ./a.sh ./a.sh
#!/bin/bash #!/bin/bash
#!/bin/bash
#!/bin/bash curl http://127.0.0.1:81/a.php
#!/bin/bash
curl http://127.0.0.1:81/a.php
curl http://127.0.0.1:81/a.php #!/bin/bash
curl http://127.0.0.1:81/a.php
curl http://127.0.0.1:81/a.php curl http://127.0.0.1:81/a.php
これは明らかにあなたが望むものではありません。それで何が起こりましたか?
出力を分析すると、最初のファイルのすべての行が2番目のファイルのすべての行と結合されることがわかります。より明確に:
file-b:
1
2
3
$ parallel --dryrun :::: b b
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
間違いはGNUを並列化することです::::
。::::
読むファイルの内容がパラメーターとして使用されます。 2つのファイルが提供されたため、そのファイルの交差積が生成されます。
あなたが望むもの:::
:
$ parallel --dryrun ::: ./a.sh ./a.sh
./a.sh
./a.sh
答え2
使い方parallel
が間違っています。
何とか4回目の実行が実行されます。
curl http://127.0.0.1:81/a.php curl http://127.0.0.1:81/a.php
構文を完全には理解していませんが、次のように動作します。
yes | head -n4 | parallel ./a.sh
マニュアルページの説明
ジョブは単一のコマンドでも、入力の各行に対して実行する必要がある小さなスクリプトでもかまいません。