Как да освободя портове, които се държат от сървър на лаптоп, след като е спрян?

Стартирам сървър за преносими компютри на jupyter на екземпляр на AWS (Redhat Linux сървър), за да се свържа през https. В конфигурационния файл имам, че това трябва да е на порт 9999. Когато обаче спра и рестартирам процеса с Ctrl-C, портът не се освобождава, както е показано по-долу.

[user@ip-xxx-xx-xx-xxx 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).

Като настрана, тези "случайни портове" не ми изглеждат много случайни.


person Jamie Bull    schedule 27.01.2016    source източник
comment
Вярно, вероятно е по-добре на SuperUser (въпреки че ipython/jupyter notebook определено е инструмент, използван от програмистката общност). Как да го мигрирам?   -  person Jamie Bull    schedule 27.01.2016
comment
сигурни ли сте, че командата за спиране наистина спира услугата? можете ли да направите stop и netstat -tlnp в raw, за да проверите това? Възможно е спирането да изтрие само pid файла, но всъщност да не успее да спре услугата   -  person Tom    schedule 27.01.2016
comment
Не, изглежда не спира услугата. Така че след netstat -tlnp мога да използвам kill [pid], което изглежда работи. Благодаря!   -  person Jamie Bull    schedule 27.01.2016
comment
радвам се, че го намери :) преместване на този коментар като отговор за потенциални други потребители   -  person Tom    schedule 27.01.2016


Отговори (1)


понякога командата за спиране на услуга не връща грешка и изтрива pid файла на процес, но всъщност не прекратява самия процес.

можете да проверите дали процесът все още работи, като изпълните командата за спиране и след това

ps aux | grep -i notebook

or

netstat -tlnp | grep <portNumber>

Както казахте, след това можете или да убиете процеса ръчно, или да коригирате стоп скрипта (обикновено /etc/init.d/serviceName+d). Причината процесът да не бъде убит често (не винаги) е свързана с разрешенията, притежавани от потребителя, изпълняващ командата

person Tom    schedule 27.01.2016
comment
Така че трябва да стартирам сървъра, използвайки sudo jupyter notebook &, а не само jupyter notebook &? - person Jamie Bull; 27.01.2016
comment
Не, това не може да бъде. Това ми дава sudo: jupyter: command not found - person Jamie Bull; 27.01.2016
comment
обикновено бихте предпочели да посветите потребител на услуга. например за услуги като apache, mysql и т.н., ще получите системни потребители, предназначени да изпълняват тези услуги, само с най-малко привилегии, необходими за тяхното изпълнение. Въпреки това, ако сигурността не е голяма работа за вас, тогава просто направете това, което работи за вас. Трудно ми е да кажа дали трябва да правите sudo или не, тъй като не знам нито вашите системни настройки/потребители/права/път/и т.н., нито услугата jupyter :) - person Tom; 27.01.2016