====== Avviare uno script Python come servizio di sistema di Windows ======
Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 18/12/2018 - 10:09 //** // //
Il nostro script di esempio lancia un banale webserver all'indirizzo http://localhost:8081 .
===== Primo metodo- creare un eseguibile che lancia Python con il nostro script =====
**httpd.py**
#!/usr/bin/env python3
from http.server import BaseHTTPRequestHandler, HTTPServer
# HTTPRequestHandler class
class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
# GET
def do_GET(self):
# Send response status code
self.send_response(200)
# Send headers
self.send_header('Content-type','text/html')
self.end_headers()
# Send message back to client
message = "Hello world from python service!"
# Write content as utf-8 data
self.wfile.write(bytes(message, "utf8"))
return
def run():
print('starting server...')
# Server settings
# Choose port 8080, for port 80, which is normally used for a http server, you need root access
server_address = ('127.0.0.1', 8081)
httpd = HTTPServer(server_address, testHTTPServer_RequestHandler)
print('running server...')
httpd.serve_forever()
run()
Lo script deve essere lanciato da un eseguibile nativo, altrimenti non funziona (Testato su Windows7). Dunque creiamo il nostro lanciatore :
#include
#include
int main(int argc, char** argv)
{
system("C:\\msys64\\mingw64\\bin\\python3.exe c:\\httpd.py");
return 0;
}
Compiliamo il nostro lanciatore . Io uso msys2 su Windows:
gcc myservice.c -o PythonApp.exe
Posizioniamo per comodita' i due file (httpd.py e PythonApp.exe) in C:\
Fatto cio' non ci resta altro che avviare un terminale di windows (cmd.exe) come amministratore e impartire il seguente comando:
sc create PythonApp binPath= "C:\PythonApp.exe" displayname= "Python http example" depend= tcpip start= auto
Se volessimo eliminare il servizio:
sc delete PythonApp
**E' necessario riavviare il sistema per far partire il servizio.**
===== Secondo metodo- usando il programma libero nssm =====
Scarichiamo [[https://nssm.cc/|nssm]], un piccolo eseguibile che non richiede installazione e impartiamo i seguenti comandi **da amministratore**:
nssm.exe install PythonApp "C:\Program Files\Python37\python.exe" "C:\Users\Admin\Desktop\webserver.py"
possiamo poi avviare il servizio con :
nssm.exe start PythonApp
oppure modificarlo (Gui):
nssm.exe edit PythonApp
o eliminarlo:
nssm.exe remove PythonApp