У меня есть сценарий gameServer.py, работающий удаленно через PuTTy.
gameServer.py выглядит так:
while True : (( listen for packets )) (( send all packets to all clients ))
КОГДА я выполняю сценарий нормально:
./gameServer.py
Работает отлично, но терминал завязан. Естественно, выход из PuTTy завершает мой скрипт.
Я хочу иметь возможность закрыть PuTTY и просто запустить этот скрипт постоянно, поэтому я попробовал:
./gameServer.py &
Но на самом деле не работает и я не понимаю почему. Прежде всего, он не получает и не отправляет никаких пакетов при запуске в этом &
режим, во-вторых, он будет "+ Остановлен" всякий раз, когда я набираю ввод или НИЧЕГО в консоли.
Я не понимаю, почему это должно останавливаться, но попробуйте
nohup ./gameServer.py &
Это должно заставить gameServer.py игнорировать сигнал зависания при отключении PuTTY.
Ты можешь сделай свой процесс демоном, тогда вы можете отсоединить свой tty, не убивая его:
def become_daemon():
pid = os.fork ()
if pid != 0: # if pid is not child...
sys.exit(0)
os.setsid() # Create new session and sets process group.
pid = os.fork () # Will have INIT (pid 1) as parent process...
if pid != 0: # if pid is not child...
sys.exit(0)
и в вашем скрипте просто вызовите эту функцию
Вы можете посмотреть на это Рецепт ActiveState для получения дополнительной информации о двойная вилка механизм и более точная реализация.
Попробуйте поместить его в фоновый режим с помощью команды: bg
user@rkt:~$ sleep 10
^z
[1]+ Stopped sleep 10
user@rkt:~$ bg
[1]+ sleep 10 &
user@rkt:~$ jobs
[1]+ Running sleep 10 &
Другой способ выйти из системы и оставить задания запущенными - использовать "disown <jobid>
"команда. Она позволяет вам отвязать задания от текущего сеанса входа в систему, чтобы вы могли выйти из системы.
Это не нацелено на решение вашей проблемы с python, не знаю, с чего начать, но вызывается временное обходное решение / полезная утилита screen
yum install screen
или apt-get install screen
если вы используете Debian / Ubuntu или Redhat / Centos / Fedora, его установят. Экран предоставляет вам сеанс оболочки, от которого вы можете отсоединиться и повторно подключиться без необходимости поддерживать соединение. Я в значительной степени использую его на любом компьютере, к которому я подключен, потому что, если я отключусь, я не прерву потенциально опасную работу в его потоке.
просто беги screen
чтобы создать новый сеанс, запустите вашу команду, а затем нажмите ctrl + a, а затем d (удерживайте нажатой клавишу для обеих букв). Чтобы повторно подключиться, запустите screen -dr
из командной строки, и ваш сеанс экрана присоединится к вашему текущему соединению.