PrivateTmp=true인 서비스는 /tmp 디렉터리의 Unix 소켓에 어떻게 액세스합니까(예: Apache에서 실행되는 PHP에서 Torque 작업 제출)

PrivateTmp=true인 서비스는 /tmp 디렉터리의 Unix 소켓에 어떻게 액세스합니까(예: Apache에서 실행되는 PHP에서 Torque 작업 제출)

우리는 사용자가 제출한 과학적 계산을 수행하는 웹 서버를 보유하고 있습니다. 계산을 실행하는 데 시간이 오래 걸릴 수 있으므로 다음을 사용합니다.토크리소스 관리자(일명 pbs_server)는 소수의 컴퓨팅 노드에 리소스를 배포/예약합니다. Torque는 /tmp디렉터리의 Unix 도메인 소켓을 사용하여 통신하지만 http 서버(및 여기에서 생성된 프로세스)는 실제 디렉터리에 액세스할 수 없으므로 /tmp이러한 프로세스에서는 소켓이 누락된 것처럼 나타나 오류가 발생합니다.

세부 사항:

  • 웹 서버는 시스템 속성이 설정된 서비스로 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

관련 정보