Продолжить фоновую задачу / задания SSH при закрытии SSH

39393
Huei

У меня тот же вопрос, что и здесь, но даже за его пределами.

Если я выйду из системы или выйду из SSH-соединения, моя программа будет работать в фоновом режиме. Перед выходом я набираю bgи jobsпроверяю фоновое выполнение задачи, но после выхода из SSH программа не запускается, она закрывается, когда я закрываю окно SSH.

Что я могу сделать, если я хочу, чтобы моя программа все еще работала после закрытия окна SSH? Я использую, nohup screenно это также не работает, или я что-то упустил?

24
Добро пожаловать в Супер пользователя! Пожалуйста, не ставьте свой ответ на вопрос. Опубликуйте его как ответ ниже, как только вы сможете (примерно через 7 часов) с помощью кнопки ** Ответить на вопрос **. Спасибо. (Также обратите внимание, что нет необходимости добавлять `
` s к вашему сообщению. Просто делайте абзацы по мере необходимости. И пока вы это делаете, пожалуйста, используйте правильную прописную букву. Это делает ваши сообщения легче для чтения.) slhck 10 лет назад 0
Кстати, нет необходимости использовать `bg` или` nohup` при использовании `screen`. Также [этот вопрос] (http://superuser.com/questions/631759/remote-sharing-of-a-terminal/631764) связан с этим. justbrowsing 10 лет назад 0
вы проверяете этот поток @ переполнение стека http://stackoverflow.com/questions/285015/linux-prevent-a-background-process-from-being-stopped-after-closing-ssh-client Ashildr 10 лет назад 0

4 ответа на вопрос

38
justbrowsing

Когда вы используете, screenвам нужно отсоединиться с CTRL+A+ Dдо выхода ssh.

В качестве альтернативы, если вы хотите запустить процесс напрямую с экрана, вы можете использовать

screen -dmSL [session name] [commands] 
  • -d начинает сеанс экрана и немедленно отсоединяется от него
  • -m заставляет создавать новый сеанс экрана
  • -S позволяет дать сессии имя
  • -L включает запись в ~/screenlog.0

пример:

screen -dmSL workstuff myscript.sh 

Затем вы можете:

возобновить позже, используя screen -x workstuff

или же

проверьте файл журнала less -r ~/screenlog.0

13
evamvid

Use tmux. I'm not even sure if screen is even still under active development. It's kind of a preference thing, but as someone who uses tmux, I can testify that it set up in about 5 minutes, and worked perfectly.

On a Debian-based system (on the remote machine):

sudo apt-get install tmux

then enter tmux to enter, run whatever process you need, and hit Ctrl+B then D (this leaves the tmux session). Then, you can log out of SSH.

When you need to come back/check on it again, start up SSH, and enter tmux attach. It will take you back to your tmux session.

tmux has many more capabilities, as detailed here. But, this should solve your immediate problem.

Good luck!

6
Huei

Наконец, я решил это с помощью screen:

В режиме экрана отсоедините его с помощью CtrlAD. Затем вы можете закрыть окно SSH.

5
Ashildr

Использование nohup: первая из приведенных ниже команд запускает программу abcd в фоновом режиме таким образом, что последующий выход из системы не останавливает ее.

$ nohup abcd &

$ выход

Похожие вопросы