최근에는 Python 스크립트를 원격으로 실행하고 싶습니다. Apache는 이미 설치되어 있고 이에 대해 잘 알고 있으므로 이에 대해 알고 싶습니다. 또 다른 옵션은 Python으로 사용자 정의 소켓 서버를 작성하는 것입니다. 매우 간단하지만 만들어야 합니다. 이것은 서비스입니다.
이는 대규모로 실행하기 위한 것이 아니며 개인 네트워크 내에서만 실행되며 sh bash 스크립트를 실행할 수도 있습니다.
답변1
이를 수행하는 방법에는 Apache CGI(이 방법), mod_python 또는 mod_wsgi 등 여러 가지가 있지만 그 중 어느 것도 설정하는 데 시간이 오래 걸리지 않습니다. 이 방법은 단계가 가장 적습니다.
CGI 모드를 활성화하는 첫 번째 단계(제 경우에는 a2enmod가 기본 경로가 아니고 /usr/sbin/에 있습니다)
/usr/sbin/a2enmod cgi
systemctl restart apache2
이제 맞다! !이제 .sh 또는 .py 스크립트를 /usr/lib/cgi-bin 폴더에 넣고 루트로 만들고 실행 권한이 있으면 URL에서 액세스할 수 있습니다.
http://machine_address/cgi-bin/script.py
스크립트 시작 부분에 shebang을 넣어야 합니다.
#!/usr/bin/python3
print("Content-Type: text/html;charset=utf-8")
print ("Content-type:text/html\r\n")
print("<H1> Hello, From python server :) </H1>")
한 단계 더 나아가세요:
홈 디렉터리나 저장소와 같이 편집하기 더 편리한 곳에 스크립트를 저장하고 /usr/lib/cgi-bin에 연결하는 것을 에뮬레이션할 수 있습니다. 전체 또는 루트를 유지하면서 그룹을 사용자 그룹으로 분류하고 권한을 다음으로 설정하면 됩니다. 775화
다음 방법을 사용하여 제출된 GET 매개변수의 쿼리 URL에 액세스할 수 있습니다. (os를 가져온 후)
queryString = os.environ.get('QUERY_STRING')
cgi 스크립트를 실행하려면 루트가 소유해야 하지만 Python 스크립트 내의 모든 코드는 사용자 www-data(기본 Apache 사용자)로 실행됩니다. 괜찮을 수도 있지만 "일반" 사용자 계정과 같이 다른 사용자에게 필요한 경우 (내가 조사한) 한 가지 옵션은 cgi 스크립트가 실행되는 사용자를 지정할 수 있는 mod_suexec입니다. 하지만 Apache가 실행하는 기본 사용자를 기본 사용자 계정으로 변경하는 것이 더 쉽다는 것을 알았습니다. 더 빠르고 간단하며 루트로 로그인하지 않고도 오류 로그 파일에 액세스하고(파이썬 오류 참조) 기본 파일과 상호 작용할 수 있습니다. user/grp 설정: (그런 다음 재부팅)
/etc/apache2/envvars
CGI 경로, 심볼릭 링크 권한 등과 같은 설정을 사용자 정의할 수 있습니다.
/etc/apache2/conf-enabled/serve-cgi-bin.conf
스크립트 상단에 다음을 추가하면 Apache error.log 대신 페이지에 멋진 html 형식으로 Python 오류를 출력할 수 있습니다.
import cgitb cgitb.enable()