È possibile eseguire uno script Python come servizio in background su un server web? Voglio fare questo per socket communication.Posso eseguire uno script Python come servizio?
risposta
Puoi renderlo un demone. C'è un PEP per una soluzione più completa, ma ho trovato che questo funziona bene.
import os, sys
def become_daemon(our_home_dir='.', out_log='/dev/null', err_log='/dev/null', pidfile='/var/tmp/daemon.pid'):
""" Make the current process a daemon. """
try:
# First fork
try:
if os.fork() > 0:
sys.exit(0)
except OSError, e:
sys.stderr.write('fork #1 failed" (%d) %s\n' % (e.errno, e.strerror))
sys.exit(1)
os.setsid()
os.chdir(our_home_dir)
os.umask(0)
# Second fork
try:
pid = os.fork()
if pid > 0:
# You must write the pid file here. After the exit()
# the pid variable is gone.
fpid = open(pidfile, 'wb')
fpid.write(str(pid))
fpid.close()
sys.exit(0)
except OSError, e:
sys.stderr.write('fork #2 failed" (%d) %s\n' % (e.errno, e.strerror))
sys.exit(1)
si = open('/dev/null', 'r')
so = open(out_log, 'a+', 0)
se = open(err_log, 'a+', 0)
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
except Exception, e:
sys.stderr.write(str(e))
Nello snippet di codice sopra, posso vedere almeno un problema: la presenza del daemon di sniffing non viene eseguita prima di tentare di avviare un'istanza nuova. – jldupont
sniffing? Intendi controllare se il demone è già in esecuzione? se è così, questo è fatto in una procedura diversa prima di chiamare quanto sopra. – Robert
bella dimostrazione, molto divertente! C'è un sacco di metodi per fare questo python-daemon, sottoprocesso con chiamate personalizzate (nohup, &), ma questo è molto semplice da capire. Bello :) –
Supponendo che questo è per Windows, vedo this recipe based on srvany
si potrebbe voler controllare Twisted.
L'ho controllato, ed è abbastanza difficile da capire. Quindi Twisted è una libreria Python, che mantiene uno script python in esecuzione per sempre per qualsiasi compito di comunicazione? (es .: socket) –
Twisted è una libreria python per scrivere server. Dopo aver scritto un server in twisted, puoi usare 'twistd -y server.py' per eseguirlo come un demone – Nathan
Se si sta parlando di Linux, è facile come fare qualcosa di simile ./myscript.py &
nohup ./myscript.py e funzionerà anche se –
Cosa ha detto Andre. Ho omesso di menzionare nohup perché di solito eseguo solo lo screen e il distacco, quindi non ho bisogno di farlo. Questi downvoters sono cattivi. – Unknown
Ma anche se stai usando la schermata, non hai creato un vero demone, è ancora un figlio della tua sessione video. nohup non è la soluzione migliore, ma è un modo rapido per eseguire un demone una tantum. – JimB
su XP e versioni successive è possibile utilizzare il Sc.exe programma di utilizzare qualsiasi exe come servizio :
>sc create
Creates a service entry in the registry and Service Database.
SYNTAX:
sc create [service name] [binPath= ] <option1> <option2>...
CREATE OPTIONS:
NOTE: The option name includes the equal sign.
type= <own|share|interact|kernel|filesys|rec>
(default = own)
start= <boot|system|auto|demand|disabled>
(default = demand)
error= <normal|severe|critical|ignore>
(default = normal)
binPath= <BinaryPathName>
group= <LoadOrderGroup>
tag= <yes|no>
depend= <Dependencies(separated by/(forward slash))>
obj= <AccountName|ObjectName>
(default = LocalSystem)
DisplayName= <display name>
password= <password>
Si può iniziare la PythonScript avviando l'interprete Python con lo script come argomento:
python.exe myscript.py
Ho uno script .py Python. Dov'è l'EXE? –
Prova py2exe http://www.py2exe.org – Yancy
puoi solo avviare l'interprete python con il tuo script come argomento: python.exe myscript.py –
C'è il molto utile Pypi package che è la base per i miei demoni scritto in Python.
- 1. Esegui uno script python come servizio Windows
- 2. Come posso chiamare uno script python da uno script python
- 3. Come eseguire uno script python da java?
- 4. Come posso rendere eseguibile uno script Python?
- 5. Come eseguire uno script python in background?
- 6. Ottenere PHP per eseguire uno script Python
- 7. Posso eseguire uno script Python da Pure Data?
- 8. python - crontab per eseguire uno script
- 9. Come eseguire uno script python come pm2 per nodejs
- 10. Come eseguire il codice quando viene chiuso uno script Python?
- 11. Come eseguire un comando nel terminale da uno script Python?
- 12. Come eseguire un AppleScript da uno script Python?
- 13. Come eseguire i comandi SVN da uno script Python?
- 14. Come posso includere uno script PHP in Python?
- 15. Come posso eseguire uno script Perl su Mac OS X?
- 16. Come posso eseguire uno script 'R' senza sopprimere l'output?
- 17. Come posso eseguire uno script PHP da Java?
- 18. Come posso eseguire il debug di uno script Perl?
- 19. Come eseguire uno script Julia in Atom
- 20. Come posso eseguire uno script python virtualenv come git pre-commit hook
- 21. Python script come servizio Linux/daemon
- 22. Eseguire uno script in Dockerfile
- 23. Eseguire più script Python contemporaneamente
- 24. Come posso interrompere l'esecuzione in uno script Python?
- 25. Come eseguire uno script PowerShell da SSIS
- 26. Come eseguire uno script .sql da bash
- 27. come eseguire uno script .sql su heroku?
- 28. Come eseguire uno script all'avvio di Ubuntu?
- 29. Come eseguire uno script sql utilizzando C#
- 30. Eseguire uno script MATLAB da python + pass args
È possibile, per una risposta più dettagliata, fornire ulteriori informazioni: quale sistema operativo si utilizza, si desidera avviare il servizio al riavvio, ecc. –
Windows o ambiente Unix? – dmeister
Pensate "server Unix/linux", che gli host web hanno in genere. –