PrivateTmp=true 的服務如何訪問 /tmp 目錄中的 unix 套接字(例如,從執行在 Apache 中的 PHP 送出 Torque 作業)
我們有一個執行使用者送出的科學計算的網路伺服器。計算可能需要長時間執行,因此我們使用**Torque**資源管理器(又名 pbs_server)在少數計算節點上分發/調度它們。Torque 使用
/tmp
目錄中的 unix 域套接字進行通信,但 http 伺服器(以及從它派生的程序)無法訪問真正的/tmp
目錄,因此對於這些程序來說,套接字似乎失去了,從而導致錯誤。細節:
- 網路伺服器正在執行 Apache,它作為具有 systemd 屬性
PrivateTmp=true
集的服務執行。這使服務擁有自己的/tmp
與“真正的”根目錄/tmp 無關的目錄。- 這些作業實際上是從 PHP 送出的(在 Apache 程序中執行)。PHP 對 進行系統呼叫
qsub
,這是一個用於送出作業的 Torque 命令。因為qsub
是從 PHP 呼叫的,所以它繼承了/tmp
Apache 的“假”目錄。qsub
在內部嘗試連接到位於/tmp/trqauthd-unix
. 但由於它沒有看到真正的 /tmp 目錄,因此它失敗並出現以下錯誤:Error in connection to trqauthd (15137)-[could not connect to unix socket /tmp/trqauthd-unix: 2]
我可以實現的唯一解決方案是在 systemd 下編輯 httpd.service 文件並將其更改
PrivateTmp
為 false。這確實解決了問題。但我寧願不這樣做,因為(我假設) PrivateTmp 被設置為 true 是有充分理由的。我想知道的是是否有任何方法可以在不同的位置創建套接字,或者以某種方式連結到可以在 Apache(及其分叉程序)中使用的套接字。
創建到套接字的連結是微不足道的,但它並不能解決問題,因為我不知道有什麼方法可以配置
qsub
為在不同的位置查找套接字。請注意,套接字是由
trqauthd
服務創建的(一個執行使用者授權以執行作業的 Torque 程序)。trqauthd 的文件提到(在一個晦澀的註釋中)可以配置套接字的位置,但是任何文件中都沒有說明如何實現這一點(更重要的是,如何讓 qsub 和其他命令知道關於新位置)。感謝您提供的任何建議,這些建議可能會幫助我找到一種在不禁用 PrivateTmp for Apache 的情況下從 PHP 向 Torque 送出作業的方法。
2013 年,
trqauthd
停止使用 IP 套接字並切換到伺服器主目錄中的 Unix 域套接字。同年晚些時候,
trqauthd
從主目錄切換到/tmp
.如您所見,自適應計算為您提供的唯一更改選項
/tmp/trqauthd-unix
是從原始碼重新編譯程序,將--with-trqauthd-sock-dir
建構配置選項更改為表示/tmp
. (/run/trqauthd
也許?)