2016-01-27 38 views
6

Sto avviando un server notebook jupyter su un'istanza AWS (server Redhat Linux) per connettersi a oltre https. Nel file di configurazione ho che questo dovrebbe essere sulla porta 9999. Tuttavia, quando mi fermo e riavvio il processo con Ctrl-C, la porta non viene rilasciata, come mostrato di seguito.Come posso rilasciare le porte che sono trattenute da un server notebook dopo che è stato arrestato?

[[email protected] notebook]$ [I 08:39:27.901 NotebookApp] The port 9999 is already in use, trying another random port. 
[I 08:39:27.901 NotebookApp] The port 10000 is already in use, trying another random port. 
[I 08:39:27.902 NotebookApp] The port 10001 is already in use, trying another random port. 
[I 08:39:27.905 NotebookApp] Serving notebooks from local directory: /home/user/docs/notebook 
[I 08:39:27.905 NotebookApp] 0 active kernels 
[I 08:39:27.905 NotebookApp] The Jupyter Notebook is running at: https://[all ip addresses on your system]:10002/ 
[I 08:39:27.905 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation). 

Per inciso, quei "porti casuali" non mi sembrano molto casuali.

+0

Vero, probabilmente migliore su SuperUser (anche se ipython/jupyter è sicuramente uno strumento utilizzato dalla comunità di programmazione) . Come posso migrarlo? –

+1

sei sicuro che il comando stop effettivamente arresti realmente il servizio? puoi fare una fermata e netstat -tlnp in raw per controllare questo? È possibile che lo stop cancelli solo il file pid ma in realtà non riesce a fermare il servizio – Tom

+0

No, sembra che non stia fermando il servizio. Quindi dopo 'netstat -tlnp' posso usare' kill [pid] 'che sembra funzionare. Grazie! –

risposta

3

talvolta il comando di arresto di un servizio non restituisce alcun errore ed elimina il file pid di un processo, ma in realtà non risolve il processo stesso.

è possibile verificare se il processo è ancora in esecuzione eseguendo il comando di arresto e poi o

ps aux | grep -i notebook 

o

netstat -tlnp | grep <portNumber> 

Come lei ha affermato si può allora o uccidere il processo manualmente, o fissare lo script stop (di solito /etc/init.d/serviceName+d). Il motivo per cui il processo non deve essere eliminato è spesso (non sempre) collegato alle autorizzazioni di proprietà dell'utente che esegue il comando

+0

Quindi dovrei avviare il server usando 'sudo jupyter notebook &' piuttosto che solo 'taccuino jupyter &'? –

+0

No, non può essere quello. Mi dà 'sudo: jupyter: comando non trovato ' –

+0

di solito preferiresti dedicare un utente a un servizio. ad esempio per servizi come apache, mysql ecc., si otterrà un utente di sistema dedicato a eseguire questi servizi, con solo i privilegi minimi necessari per eseguirli. Tuttavia, se la sicurezza non è un grosso problema per te, allora fai semplicemente ciò che funziona per te. È difficile per me dire se dovresti fare sudo o no in quanto non conosco né le tue impostazioni di sistema/utenti/diritti/percorso/etc né il servizio jupyter :) – Tom