.sh 스크립트가 SSH 쉘을 통해 정상적으로 작동하지만 PHP 또는 crontab을 통해 실행될 수없는 원인은 무엇입니까?쉘 스크립트가 ssh를 통해 사용될 때만 응용 프로그램을 시작합니다.
게임 서버를 실행하는 VPS가 있지만 유지 관리가 가능하도록하기 위해 지루한 프로세스 (서버 설정 또는 삭제)를 시작하고 중요한 기능 (예 : 시작 및 종료)을 자동화 할 계획입니다. 실제로 서버를 필요로하는 사람들이 쉽게 수용 할 수 있습니다.
이제 쉘 스크립트를 만들었고 테스트했을 때, 그들은 절대적으로 잘 작동했습니다. startserver가 서버를 시작하고 restartserver가 서버를 다시 시작했지만 PHP에서 실행하거나 나중에 - crontab을 알아 냈을 때 서버를 마술로 시작하면 작동하지 않습니다. 그것들을 멈추게하고, 그들이 실행 중인지 확인하고, 업데이트하고, 의도 한대로 작동하는 다른 모든 기능들을 수행하지만, 서버를 시작하는 것은 아무 것도하지 않았습니다. 아무 것도 인쇄하지 않고 방금 0을 반환했습니다. (statusserver.sh) 어떤 경우에 작동하지 않는 한 여기
/sbin/start-stop-daemon -v -t --start --exec ~mta/servers/$1/files/mta-server -- -d
그리고 : (startserver.sh)
예를 들어, 여기에 두 경우 모두에서 작동하는 스크립트의 예입니다
/sbin/start-stop-daemon -v --start --exec ~mta/servers/$1/files/mta-server -- -d
유일한 차이점 은 statusserver.sh 실제로 성공할 수 -t없이 동일한 명령을하는 경우에만 당신을 말할 것이다, "-t"가지고 있다는 것입니다. 그리고 실행 statusserver.sh과 같이 :
sudo -u mta ~mta/sh/statusserver.sh test
실제로 수행 작업, "~ MTA/서버/테스트/파일/MTA 서버 -d를 시작할 것"의 라인을 따라 인쇄 뭔가. 하지만 이렇게하면 :
sudo -u mta ~mta/sh/startserver.sh $2
절대적으로 아무것도하지 마십시오. 아무 것도 출력하지 않고 실제로 0을 반환합니다. (작업이 성공했다는 것을 의미합니다)
이제 재미있는 부분을 위해 : 서버가 이미 실행 중일 때 startserver.sh는 do : 서버가 이미 실행 중이며 오류 코드를 반환한다고합시다. (왜냐하면 start-stop-daemon은 나를 위해 그것을 수행하기에 충분히 친절하기 때문입니다.) 그러나 그것은 평범한 것이고 무엇이든 시작하는 것을 거부합니다.
교체 시작 - 중지 - 데몬에게 같은과 :
sudo -u mta ~mta/servers/test/files/mta-server -d
정확히 같은 일을 수행합니다, 그것은 여전히 그렇고 0
아를 반환하면서 그냥 실행을 거부합니다 아니다 sudo 문제. 다음은 잘 작동하기 때문에 그 중 나는 확신합니다 너무
sudo -u web1 sudo -u mta ~mta/scripts/startserver.sh test
그래서 다시 내 질문에
: 리눅스, 셸, 강타 또는를 실행할 때 밖으로 응용 프로그램을 시작하기를 거부 평면에 무엇을 일으킬 수있는 것 PHP 나 crontab 중 하나일까요? SSH를 통해 실행되면 행복하게 받아 들일 수 있습니까? 전환해야 할 설정이 있습니까? 내가하고 싶은 것을 막을 수있는 패키지? 내가 놓친 다른 어떤 것?
실행 파일로 스크립트 또는 바이너리를 지정 했습니까? –
예. 다른 사용자의 홈 폴더에서 쉘 스크립트를 실행하여 다양한 작업을 수행하고 있으며, SSH를 사용하여 트리거 할 때 모두 작동합니다. 그러나 PHP를 사용하면 시작 명령이 실행되지 않습니다. – Gamesnert