特定のスケジュールされたプロセスにポートを専用に割り当てる方法は?

特定のスケジュールされたプロセスにポートを専用に割り当てる方法は?

毎日午前2時に開始するXYZバッチプロセスがあります。この XYZ はポート 59070 から開始するように構成されます。完了すると、このポートはオープンポートになります。しかし、最近問題が発生しました。他のプロセスは59070を使用しており、このXYZプロセスが開始されたときに実行に失敗しました。

回避策として、設定を別のポート59071に更新し、プロセスを正常に実行しました。私の質問は、このポート59070をブロックし、他のプロセスがこのポートを使用しないようにすることができるかどうかです。私たちはSolaris 10を使用しています。

ベストアンサー1

ポート 59070 はい一時ポート- 1つは次の目的に使用できます。国を離れるすべてのプロセスへのTCP接続。 (ポート59071も同様なので、これは実際には良い解決策ではありません...)

Solarisでは、一時ポート範囲は次のように設定されます。tcp_smallest_anon_porttcp_largest_anon_port調整可能なパラメーター。デフォルトの範囲は32,768〜65,535です。この範囲のすべてのポートがビジーである可能性があります。いつでも発信TCP接続を介して。

@Jeff Schallerの答えによると、ポートは先着順に使用されるため、ポートを「予約」する唯一の方法は、常にポートに何かをバインドすることです。その答えで、「ポートセーバー」スクリプトを終了することと、実際にポートを使用している「一般」プロセスの間に他のプロセスが問題のポートを取得できることに注意してくださいbind()。そうではない可能、もちろんですが、そのようなことが起こることもあります。処理が重要な場合は、これについて心配する必要があると思います。

一時ポートを使用しないか、プロセスが常に実行されるように設定しないことをお勧めします。inetadmプロセスを自動的に実行するサービスを構成するために使用されます。。これにより、inetdプロセスは常に「ユーザー」ポートにバインドされ、ユーザーが使用できるように効果的にスケジュールされます。

おすすめ記事