From cd3233ff4e5b7c1a8335271de8425741f0968ea5 Mon Sep 17 00:00:00 2001 From: Brookie Guzder-Williams Date: Fri, 7 Apr 2017 17:30:30 -0700 Subject: [PATCH 1/8] NbserverStopApp: stop notebooks through cli - jupyter notebook stop --- notebook/notebookapp.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index 28f6496ec4..8d3581c192 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -16,6 +16,7 @@ import logging import mimetypes import os +import subprocess import random import re import select @@ -346,6 +347,45 @@ def start(self): self.log.info("Wrote hashed password to %s" % self.config_file) +class NbserverStopApp(JupyterApp): + version = __version__ + description="Stop currently running notebook server for a given port" + kill_cmd='kill' + kill_signal='-3' + + flags = dict( + json=({'NbserverStopApp': {'json': True}}, + "Produce machine-readable JSON output."), + ) + + json = Bool(True, config=True, + help="If True, each line of output will be a JSON object with the " + "details from the server info fpyile.") + + port = Integer(8888, config=True, + help="Port of the server to be killed. Default 8888") + + + def parse_command_line(self, argv=None): + super(NbserverStopApp, self).parse_command_line(argv) + if self.extra_args: + self.port=int(self.extra_args[0]) + + + def start(self): + server=next((server for server in list_running_servers(self.runtime_dir) if server.get('port')==self.port),None) + if server: + subprocess.Popen([self.kill_cmd,self.kill_signal,str(server.get('pid'))],stdout=subprocess.PIPE).communicate() + else: + ports=[s.get('port') for s in list_running_servers(self.runtime_dir)] + if ports: + print("There is currently no server running on port {}.".format(self.port)) + print("Ports currently in use:") + for port in ports: print("\t* {}".format(port)) + else: + print("There are currently no running servers") + + class NbserverListApp(JupyterApp): version = __version__ description="List currently running notebook servers." @@ -449,6 +489,7 @@ class NotebookApp(JupyterApp): subcommands = dict( list=(NbserverListApp, NbserverListApp.description.splitlines()[0]), + stop=(NbserverStopApp, NbserverStopApp.description.splitlines()[0]), password=(NotebookPasswordApp, NotebookPasswordApp.description.splitlines()[0]), ) From 219c762f3289ff0cfc596a1db321b0ab57f499cd Mon Sep 17 00:00:00 2001 From: Brookie Guzder-Williams Date: Sat, 8 Apr 2017 12:31:17 -0700 Subject: [PATCH 2/8] remove unused props --- notebook/notebookapp.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index 8d3581c192..dbfb4f14a2 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -353,14 +353,6 @@ class NbserverStopApp(JupyterApp): kill_cmd='kill' kill_signal='-3' - flags = dict( - json=({'NbserverStopApp': {'json': True}}, - "Produce machine-readable JSON output."), - ) - - json = Bool(True, config=True, - help="If True, each line of output will be a JSON object with the " - "details from the server info fpyile.") port = Integer(8888, config=True, help="Port of the server to be killed. Default 8888") From b6ac73cbe15744eb56481c2f843312264c0cda12 Mon Sep 17 00:00:00 2001 From: Brookie Guzder-Williams Date: Sat, 8 Apr 2017 12:33:50 -0700 Subject: [PATCH 3/8] use os.kill --- notebook/notebookapp.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index dbfb4f14a2..643016807f 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -16,7 +16,6 @@ import logging import mimetypes import os -import subprocess import random import re import select @@ -366,8 +365,7 @@ def parse_command_line(self, argv=None): def start(self): server=next((server for server in list_running_servers(self.runtime_dir) if server.get('port')==self.port),None) - if server: - subprocess.Popen([self.kill_cmd,self.kill_signal,str(server.get('pid'))],stdout=subprocess.PIPE).communicate() + if server: os.kill(str(server.get('pid')), signal.SIGQUIT) else: ports=[s.get('port') for s in list_running_servers(self.runtime_dir)] if ports: From 8b20dcc918f0561104651f3ddf6953efed681057 Mon Sep 17 00:00:00 2001 From: Brookie Guzder-Williams Date: Sat, 8 Apr 2017 12:35:16 -0700 Subject: [PATCH 4/8] exit if server not found --- notebook/notebookapp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index 643016807f..04649de453 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -374,7 +374,7 @@ def start(self): for port in ports: print("\t* {}".format(port)) else: print("There are currently no running servers") - + self.exit(1) class NbserverListApp(JupyterApp): version = __version__ From 277d000d541d447a1769776803103978bc9187a8 Mon Sep 17 00:00:00 2001 From: Brookie Guzder-Williams Date: Sat, 8 Apr 2017 12:39:30 -0700 Subject: [PATCH 5/8] dont cast to string --- notebook/notebookapp.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index 04649de453..cb3a796b5e 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -365,7 +365,7 @@ def parse_command_line(self, argv=None): def start(self): server=next((server for server in list_running_servers(self.runtime_dir) if server.get('port')==self.port),None) - if server: os.kill(str(server.get('pid')), signal.SIGQUIT) + if server: os.kill(server.get('pid'), signal.SIGQUIT) else: ports=[s.get('port') for s in list_running_servers(self.runtime_dir)] if ports: @@ -376,6 +376,7 @@ def start(self): print("There are currently no running servers") self.exit(1) + class NbserverListApp(JupyterApp): version = __version__ description="List currently running notebook servers." From ed4de773c916d1a81ab697e9afd8ad7468d74bde Mon Sep 17 00:00:00 2001 From: Brookie Guzder-Williams Date: Sat, 8 Apr 2017 12:41:01 -0700 Subject: [PATCH 6/8] remove unused kill_cmd/signal prop --- notebook/notebookapp.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index cb3a796b5e..bbe66a48e5 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -349,20 +349,15 @@ def start(self): class NbserverStopApp(JupyterApp): version = __version__ description="Stop currently running notebook server for a given port" - kill_cmd='kill' - kill_signal='-3' - port = Integer(8888, config=True, help="Port of the server to be killed. Default 8888") - def parse_command_line(self, argv=None): super(NbserverStopApp, self).parse_command_line(argv) if self.extra_args: self.port=int(self.extra_args[0]) - def start(self): server=next((server for server in list_running_servers(self.runtime_dir) if server.get('port')==self.port),None) if server: os.kill(server.get('pid'), signal.SIGQUIT) From b2f63b4a9c9ba2ddf8f2f544c34583b1cbbb6744 Mon Sep 17 00:00:00 2001 From: Brookie Guzder-Williams Date: Mon, 10 Apr 2017 10:38:57 -0700 Subject: [PATCH 7/8] SIGTERM not SIGQUIT --- notebook/notebookapp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index bbe66a48e5..e05704d138 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -360,7 +360,7 @@ def parse_command_line(self, argv=None): def start(self): server=next((server for server in list_running_servers(self.runtime_dir) if server.get('port')==self.port),None) - if server: os.kill(server.get('pid'), signal.SIGQUIT) + if server: os.kill(server.get('pid'), signal.SIGTERM) else: ports=[s.get('port') for s in list_running_servers(self.runtime_dir)] if ports: From 44df51ad60ea9783fbc170ae0103ecccdeb9a928 Mon Sep 17 00:00:00 2001 From: Brookie Guzder-Williams Date: Tue, 11 Apr 2017 08:22:33 -0700 Subject: [PATCH 8/8] always exit(1) if not server found. break up long list comprehension --- notebook/notebookapp.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/notebook/notebookapp.py b/notebook/notebookapp.py index e05704d138..82ccb146b2 100755 --- a/notebook/notebookapp.py +++ b/notebook/notebookapp.py @@ -359,7 +359,8 @@ def parse_command_line(self, argv=None): self.port=int(self.extra_args[0]) def start(self): - server=next((server for server in list_running_servers(self.runtime_dir) if server.get('port')==self.port),None) + servers=list_running_servers(self.runtime_dir) + server=next((server for server in servers if server.get('port')==self.port),None) if server: os.kill(server.get('pid'), signal.SIGTERM) else: ports=[s.get('port') for s in list_running_servers(self.runtime_dir)] @@ -369,7 +370,7 @@ def start(self): for port in ports: print("\t* {}".format(port)) else: print("There are currently no running servers") - self.exit(1) + self.exit(1) class NbserverListApp(JupyterApp):