最近、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フォルダに入れてrootにし、実行権限がある場合は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スクリプトを実行するにはrootが所有する必要がありますが、Pythonスクリプト内のすべてのコードはユーザーwww-data(デフォルトのApacheユーザー)として実行されます。大丈夫かもしれませんが、「一般」ユーザーアカウントなど、他のユーザーに必要な場合(私が調査した)1つのオプションは、cgiスクリプトを実行するユーザーを指定できるmod_suexecです。しかし、Apacheが実行しているデフォルトユーザーをデフォルトユーザーアカウントに変更する方が簡単であることがわかりました。より高速で簡単で、rootとしてログインしなくてもエラーログファイルにアクセスし(Pythonエラーを参照)、デフォルトファイルと対話できます。 user/grp 設定: (その後、再起動)
/etc/apache2/envvars
CGIパス、シンボリックリンク権限などの設定をカスタマイズできます。
/etc/apache2/conf-enabled/serve-cgi-bin.conf
スクリプトの上に次を追加すると、Apache error.logの代わりにページに素晴らしいhtml形式でPythonエラーを出力できます。
import cgitb cgitb.enable()