2016-08-02 3 views
0

나는 원격 서버에서 PHP 스크립트를 실행하려고합니다. (서버에 로그인하는 데 사용할 수있는) 가능한 사용자와 함께 스크립트를 실행하면 완벽하게 작동합니다. 그러나 내 PHP 스크립트에 include 문이있을 때 작업이 실패합니다.퍼시스턴스를 사용하여 PHP 스크립트를 실행합니다.

내 PHP 스크립트는 ansible 작업

 
- name: run script 
    shell: 'php /srv/project/script.php' 

를 통해 그것을 실행하는 경우 그러나 올바른 액세스 권한이있는 사용자로 스크립트를 실행하는 경우

includes/someLibrary.php
모든 것이 잘 작동 포함
/srv/project
이 시도

낳는다 그것은 함께 실패 :

failed to open stream: No such file or directory in /srv/project/includes/someLibrary.php

매우 기본적인 PHP 스크립트를 실행하는 것은 멋지게 작동합니다.

+0

파일이'/ srv/project/includes/someLibrary.php'에 있습니까? – aynber

+0

예. 또한 수동으로 스크립트를 실행할 때 잘 작동합니다. – mu35li

+0

파일에 대한 파일 사용 권한은 무엇입니까? – aynber

답변

2

방금 ​​문제의 해결책을 찾았습니다. 스크립트를 수동으로 실행했을 때, 서버에 연결하고 을 호출하기 전에 cd3d를 호출했습니다.이 경우 PHP include은 포함하려는 파일을 현재 디렉토리에서 찾습니다. 서버에 연결할 때 디렉토리가 변경되지 않으므로 no such file or directory 오류가 발생합니다. 디렉토리 모듈을 명령을 실행하기 전에 지정된 디렉토리로 변경하기 위해 쉘 모듈이 chdir을 인수로 취하므로이 해결책은 간단합니다. 다음과 같이

내 ansible 작업은 이제 같습니다

 
- name: run script 
    shell: 'php /srv/project/script.php' 
    args: 
    chdir: '/srv/project' 

감사합니다 모든 사람을 도와!

+0

여기에 이런 종류의 문제에 대한 문제 해결 체크리스트가 있습니다 : https://stackoverflow.com/questions/36577020/failed- open-stream-no-such-file-or-directory –

+0

또한 PHP 코드를 상대 경로에 의존하지 않도록 변경하는 것이 좋습니다 (링크에서 설명한대로) –

0

Ansoft는 비대화 형 ssh 세션에서 실행되므로 사용자 환경 설정 (예 : .bashrc, .bash_profile)을 적용하지 않습니다. 일반적으로 대화 형으로 실행될 때와 다른 대화 형으로 실행될 때의 동작이 다릅니다. 대화 형 printenv와 raw: printenv 사이의 차이점을 Anabilities를 통해 확인하십시오. 작업을 수행하기 위해 필요한 작업 (/ 할 수있는 작업/게임 environment: 블록을 통해)을 설정해야 할 필요가있을 것입니다.

+0

감사합니다. 조언. 나는 ssh를 통해 로그인 할 때 envvars를 점검했고, 가능한 경우를 통해 연결되었을 때 확인했다. 그들이 약간의 사소한 차이와 거의 동일하다는 것을 알게됩니다. 내 문제를 일으킬만한 것은 없습니다. – mu35li

+0

여기에 이런 종류의 문제에 대한 문제 해결 체크리스트가 있습니다 (https : // stackoverflow).com/questions/36577020/open-stream-no-such-file-or-directory –

관련 문제