Skip to content

Commit d00b7e3

Browse files
authored
Merge pull request #2388 from brookisme/notebook-stop
NbserverStopApp: stop notebooks through cli - jupyter notebook stop <…
2 parents a747374 + 44df51a commit d00b7e3

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

notebook/notebookapp.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,33 @@ def start(self):
346346
self.log.info("Wrote hashed password to %s" % self.config_file)
347347

348348

349+
class NbserverStopApp(JupyterApp):
350+
version = __version__
351+
description="Stop currently running notebook server for a given port"
352+
353+
port = Integer(8888, config=True,
354+
help="Port of the server to be killed. Default 8888")
355+
356+
def parse_command_line(self, argv=None):
357+
super(NbserverStopApp, self).parse_command_line(argv)
358+
if self.extra_args:
359+
self.port=int(self.extra_args[0])
360+
361+
def start(self):
362+
servers=list_running_servers(self.runtime_dir)
363+
server=next((server for server in servers if server.get('port')==self.port),None)
364+
if server: os.kill(server.get('pid'), signal.SIGTERM)
365+
else:
366+
ports=[s.get('port') for s in list_running_servers(self.runtime_dir)]
367+
if ports:
368+
print("There is currently no server running on port {}.".format(self.port))
369+
print("Ports currently in use:")
370+
for port in ports: print("\t* {}".format(port))
371+
else:
372+
print("There are currently no running servers")
373+
self.exit(1)
374+
375+
349376
class NbserverListApp(JupyterApp):
350377
version = __version__
351378
description="List currently running notebook servers."
@@ -449,6 +476,7 @@ class NotebookApp(JupyterApp):
449476

450477
subcommands = dict(
451478
list=(NbserverListApp, NbserverListApp.description.splitlines()[0]),
479+
stop=(NbserverStopApp, NbserverStopApp.description.splitlines()[0]),
452480
password=(NotebookPasswordApp, NotebookPasswordApp.description.splitlines()[0]),
453481
)
454482

0 commit comments

Comments
 (0)