PrivateTmp = trueのサービスは、/ tmpディレクトリのUnixソケットにどのようにアクセスします(Apacheで実行されているPHPからTorqueジョブを送信するなど)。

PrivateTmp = trueのサービスは、/ tmpディレクトリのUnixソケットにどのようにアクセスします(Apacheで実行されているPHPからTorqueジョブを送信するなど)。

私たちは、ユーザーが提出した科学的計算を実行するWebサーバーを持っています。計算の実行に時間がかかることがあるので、次のようにします。トルクリソースマネージャ(別名pbs_server)は、少数のコンピューティングノードにリソースを配布/予約します。 Torqueは/tmpディレクトリのUnixドメインソケットを使用して通信しますが、httpサーバー(およびここで作成されたプロセス)は物理ディレクトリにアクセスできないため、これらの/tmpプロセスではソケットが欠落しているように見え、エラーが発生します。

詳細:

  • Webサーバーは、システム属性が設定されているサービスでApacheを実行していますPrivateTmp=true。これにより、サービスは/tmp「実際の」ルート/ tmpとは別に独自のディレクトリを持ちます。
  • これらのアクションは実際にはPHP(Apacheプロセスで実行)から送信されます。 PHPは、qsubジョブを送信するために使用されるTorqueコマンドであるシステムコールを実行します。qsubPHPから呼び出されるので、Apacheの「偽の」/tmpディレクトリを継承します。
  • qsub内部的にあるUnixソケットに接続しようとします/tmp/trqauthd-unix。ただし、実際の/ tmpディレクトリが表示されないため、次のエラーで失敗します。 Error in connection to trqauthd (15137)-[could not connect to unix socket /tmp/trqauthd-unix: 2]

私が実装できる唯一の解決策は、systemdの下のhttpd.serviceファイルを編集してPrivateTmpfalseに変更することでした。これは実際に問題を解決しました。しかし、私はそうしたくありません。これは、PrivateTmpが合理的な理由でtrueに設定されているためです。

別の場所にソケットを作成したり、Apache(および分岐プロセス)内で使用できるソケットへのリンクを設定する方法があるかどうか疑問に思います。

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

ソケットは、trqauthdサービス(実行中のジョブに対してユーザー認証を実行するTorqueプログラム)によって生成されます。 trqauthdのドキュメントではソケットの位置を設定できると述べていますが、ドキュメントにこれを行う方法(もっと重要なのは、qsubや他のコマンドに新しい場所を知らせる方法)の説明はありません。場所) 。

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

答え1

2013年、trqauthdIPソケットを無効にするサーバーのホームディレクトリにあるUnixドメインソケットに切り替えます。

その年の終わり、trqauthdホームディレクトリから次へ/tmp

ご覧のとおり、Adaptive Computeが提供する唯一の変更オプションは、ソースから/tmp/trqauthd-unixプログラムを再コンパイルして--with-trqauthd-sock-dirビルド設定オプションをexpress(おそらく?)に変更することです/tmp/run/trqauthd

関連情報