2

fwbuilder で生成された簡単な bash スクリプトがあります。これは、いくつかの echo ステートメントをネストし、それらを iptables-restore にパイプします。複数の「iptables -A xxx」行を使用する代わりに、この方法でコンパイルします。これは、コンパイルとデプロイがはるかに高速であり、既存の接続もドロップしないためです。

問題は、許可されている複数のリダイレクトの制限に達したように見えることです (~23'850 行は機能しませんが、~23'600 行は機能します)。カーネル 2.6.18 (CentOS 5.x) で実行すると壊れてしまい、2.6.32 (6.x) で実行すると魅力的に動作します。

スクリプトは基本的に次のようになり、コマンドにパイプされた 1 つの長い行として出力されます。

(エコー "1"; エコー "2"; エコー "3"; ... ; エコー "25000") | /何でもする

質問は、カーネルを再コンパイルせずにこの制限を増やす簡単な方法はあるのでしょうか? パイプの標準入力文字制限のようなものだと思います。または、OS のアップグレードを行う必要がありますか?

編集: ああ、古いカーネルで実行すると、エラーは表示されませんが、segfault が dmesg に表示されることも追加したいと思います。

4

2 に答える 2

1

2.6.32 では問題が観察されず、2.6.18 では観察されない理由は、カーネル 2.6.23 からARG_MAX制限が削除されたためです。 これは変更のコミットです。

制限を回避する方法を見つけるには、ARG_MAXを参照してください。

于 2013-07-16T13:11:50.977 に答える
0

代わりにヒアドキュメントを使用できますか?

cat <<EOF | /do/anything
1
2
3
...
25000
EOF
于 2013-07-16T13:02:05.597 に答える