web-dev-qa-db-ja.com

PrivateTmp = trueのサービスが/ tmpディレクトリのUNIXソケットにアクセスする方法(PHP)からTorqueジョブを送信するなど)

ユーザーから送信された科学計算を実行するウェブサーバーがあります。計算には長時間かかる可能性があるため、Torqueリソースマネージャー(別名pbs_server)を使用して、それらを配布/スケジュールします少数の計算ノード。 Torqueは、通信のために_/tmp_ディレクトリのUNIXドメインソケットを利用しますが、httpサーバー(およびそこから分岐したプロセス)は、真の_/tmp_ディレクトリにアクセスできないため、これらのプロセスにはソケットが表示されます見つからないため、エラーが発生します。

詳細:

  • WebサーバーはApacheを実行しており、Apacheはsystemdプロパティ_PrivateTmp=true_が設定されたサービスとして実行されます。これにより、サービスは「真の」ルート/ tmpとは無関係の独自の_/tmp_ディレクトリを持つことになります。
  • ジョブは実際にはPHP(Apacheプロセスで実行中)から送信されます。)PHPは、トルクであるqsubへのシステムコールを行います。ジョブを送信するコマンド。qsubはPHPから呼び出されるため、Apacheから「偽の」_/tmp_ディレクトリを継承します。
  • qsubは、内部的に_/tmp/trqauthd-unix_にあるUNIXソケットへの接続を試みます。しかし、実際の/ tmpディレクトリが表示されないため、次のエラーで失敗します:Error in connection to trqauthd (15137)-[could not connect to unix socket /tmp/trqauthd-unix: 2]

私が達成できる唯一の解決策は、systemdの下のhttpd.serviceファイルを編集し、PrivateTmpをfalseに変更することでした。これはDID問題を修正します。しかし、私は(おそらく)PrivateTmpが正当な理由でtrueに設定されていたので)これを実行したくありません。

私が知りたいのは、ソケットを別の場所に作成する方法や、Apache(およびフォークされたプロセス)から使用できるソケットへのリンクを作成する方法があるかどうかです。

ソケットへのリンクを作成するのは簡単ですが、別の場所でソケットを探すようにqsubを構成する方法がわからないため、問題は解決しません。

ソケットはtrqauthdサービス(ジョブを実行するためのユーザー認証を実行するトルクプログラム)によって作成されることに注意してください。 trqauthdのドキュメントでは、ソケットの場所を構成できると(あいまいなメモで)言及されていますが、どのようにしてそれを実現できるか(さらに重要なことに、qsubおよびその他のコマンドに通知する方法)に関するドキュメントには何も示されていません新しい場所について)。

PrivateTmp for Apacheを無効にすることなく、PHPなしでTorqueにジョブを送信する方法を見つけるのに役立つ可能性のある提案をありがとうございます。

4
drwatsoncode

2013年、 trqauthdはIPソケットの使用を停止 し、サーバーのホームディレクトリでUnixドメインソケットに切り替えました。

同じ年の後半、 trqauthdがホームディレクトリから/tmp に切り替わりました。

ご覧のとおり、/tmp/trqauthd-unixを変更するためにアダプティブコンピューティングが提供した唯一のオプションは、--with-trqauthd-sock-dirビルド構成オプションを変更して/tmp以外の場所を示すようにプログラムをソースから再コンパイルすることです。 (/run/trqauthd多分?)

5
JdeBP