Продолжится ли процесс копирования в ubuntu если закрыть putty

Обновлено: 03.07.2024

Я использовал rsync для копирования файлов 15GB между серверами с помощью шпатлевки. Я хочу знать, что если я закрываю Putty terminal, это также завершает rync или нет, потому что файл не копируется должным образом.

Я пробовал это, когда я делаю резервные копии, то даже если я закрываю замазку, то scrip продолжает работать в фоновом режиме

предполагая, что ваша цель состоит в том, чтобы команда rsync продолжала работать, самое простое-отключить задание. Есть два способа сделать это:

вышеуказанное создаст задание, отсоединенное от вашего терминала в начале, поэтому закрытие терминала не остановит его.

выше будет отречься от выполнения задания, так что вы можете закрыть терминал, не останавливая его.

наконец, вы можете использовать программу screen(1) или подобный для того чтобы держать стержень сеанс живой и неповрежденный (и может быть возобновлен), даже когда вы заканчиваете сеанс шпаклевки.

обычно большинство команд завершают работу, если консоль закрыта. Если вы хотите, чтобы они продолжали работать, Посмотрите на команду NOHUP (Nohup-это не процесс зависания, зависание от дней модемов и "зависания" телефона)

предполагая, что вы запускаете rsync на каком-то клиенте, нормальное поведение процесса должно завершиться, если он терял свой управляющий tty, который имеет место, когда вы закрываете замазку. Однако вы можете запускать задания с nohup(NOHUP (1)), и я думаю, что это то, что делают ваши сценарии резервного копирования (если никакие другие "трюки" не были задействованы). Вывод вашего rsync commadn будет добавлен в файл nohup.вне в текущем или вашем домашнем каталоге в зависимости от ваших разрешений на машине nohup процесс продолжается.

Я бы рекомендовал выполнять длинные операции, такие как rsync ing 15GB по сети (или более уместно для StackOverflow и программирования, выполняя большую сборку на удаленном хосте) в экран GNU сессии.

затем вы можете отключиться от сеанса (закрыв шпатлевку, если хотите) и снова подключиться позже, чтобы увидеть, как продвигается ваша работа.

Я запускаю сервер Node.js из Raspbian (Debian) машины, и я хотел бы начать и остановить сервер удаленно. Это для меня означает использование PuTTY для доступа к оболочке, за исключением случаев, когда я закрываю терминал PuTTY или он истекает, мой сервер идет с ним, потому что я просто запускаю свой сервер на переднем плане.

Есть ли способ сохранить это, но все же есть способ убить процесс после этого?

4 ответа

В вашем вопросе немного не хватало деталей, поэтому я предполагаю, что вы имеете в виду, что вы набрали команду, чтобы запустить свой сервер на консоли вашего Pi, и он был выполнен на переднем плане.

Если это так, у вас есть пять вариантов, упорядоченных по сложности:

Сделайте то, что вы делали раньше, но делайте это в процессе screen . В основном это связано с установкой screen ( sudo apt-get install screen в вашей системе Debian), а затем, прежде чем вводить команду для запуска вашего сервера, выполните screen . Это открывает новую оболочку, которую вы затем можете повторно подключить позже, даже если ваше соединение PuTTY замирает. Таким образом, он будет действовать так, как будто вы никогда не отключились.

Если вы не знакомы с экраном screen , вы можете сделать некоторое чтение на Wikipedia и в manpages . Вы также можете выполнить эту же задачу с помощью tmux .

Поместите ваш сервер в screen в фоновом режиме. Это означает, что вы создадите новый сеанс screen в фоновом режиме, но никогда не присоединяетесь к нему. И вместо запуска оболочки на экране будет запущен ваш сервер. Вот что вы наберете:

Если вам нравится, вы можете сделать этот запуск при загрузке. В основном вам нужно поместить команду экрана в файл /etc/rc.local или /etc/rc.d/rc.local , я забыл, что. Если у вас возникают проблемы с этим, задайте новый вопрос.

Опять же, вы можете сделать это с помощью tmux .

Напишите сценарий службы. Поскольку вы работаете в Debian и новы, вы предположительно используете стандартный init , который предоставляет Debian, который является System V Init. Я никогда не смотрел служебные файлы для System V Init, только systemd и немного Upstart, поэтому я не могу вам помочь. Задайте новый вопрос, если вы хотите продолжить это.

Это наименее «хакерский» способ, IMHO, и это то, что вам следует рассмотреть, если вы используете свой сервер в долгосрочной перспективе, так как вы можете управлять им, как и другие службы в системе, с помощью команд типа sudo service your_server stop и т. д. Выполнение этого способа автоматически запускает ваш сервер при загрузке, и вам не нужен экран screen , потому что он также автоматически происходит в фоновом режиме.

Он также автоматически запускается как root, что является опасным - вы должны поместить логику на свой сервер, чтобы удалить привилегии, которые у вас есть, став непривилегированным пользователем, созданным специально для сервера. (Это на случай, если сервер будет скомпрометирован - представьте, если кто-то может запускать все как root, через ваш сервер! Eugh. Этот вопрос делает OK работу, говоря об этом.)

Я не знаю о raspbian, но поскольку он получен из Debian, я предполагаю nohup также будет доступен. Вместо того, чтобы запускать процесс как,

nohup предотвратит завершение процесса, когда терминал отключится. НТН.

Используйте supervisord , если вы действительно серьезно.

Основной способ сделать это для запуска вашего двоичного файла как:

Затем, когда вы хотите его убить,

Но я бы использовал супервизор. Это позволяет вам делать много причудливых вещей.

Если вы используете bash для оболочки, вы можете использовать команду disown , которая будет иметь тот же результат, что и команда nohup , за исключением того, что она принимает первую запущенную программу он находит. Например:

Или, может быть, вы можете создать скрипт, который разворачивает ваш процесс и убивает отца, чтобы ребенок был наследован init. Это то, что я делаю для сценариев, например. Это не просто, но когда вы запускаете его, он автоматически переходит в фоновый режим и не прерывается, если вы выходите из системы.

Другим решением было бы создать служебный файл и включить его, чтобы вы могли запускать, останавливать, перезапускать или что угодно с помощью простой команды. (но я действительно не знаю, использует ли debian systemd, поскольку я нахожусь в archlinux)


setsid sudo -u user php conv.php > /var/log/conv.log &
Тоже работает. Так лучше оставить?


Вот тебе ещё один вариант:

beastie ★★★★★ ( 30.09.15 17:01:46 )
Последнее исправление: beastie 30.09.15 17:02:06 (всего исправлений: 1)


Ну и какой лучше юзать? )


Лучше не писать долгоработающие процессы на php.



Тогда как единственно правильный метод без оверкила - setsid

setsid - run a program in a new session

похоже на то. На disown почему-то нет мана (


Потому что дисовн - вообще костыль шелла (баша), и в sh, csh и прочих его нет.


Вот оно что. Ясно, спасибо.


Иногда люблю делать вот так:


А ты хорош, я бы на тебе женился.


На любом языке, который сделан не для написания домашних веб-страничек.

echo marryme | at now + 3 year


Если у вас systemd, то можно еще через systemd-run --user


Да вы что в 90х годах застряли? Пхп 5 уже больше 10 лет как вышел, а вы все про 3 вспоминаете


Ну как это не юзать, если сайт на пхп и этот консольный скрипт плотно с ним интегрирован. Нормально работает вроде, а что с ним может не так быть, почему лучше не писать долгоработающие?

Переходим на Ubuntu

3 способа оставить команду работать после выхода из сеанса SSH

3 способа оставить команду работать после выхода из сеанса SSH

При работе с удаленной системой по протоколу SSH часто возникает необходимость запуска команды, на выполнение которой требуется много времени. Как вы, возможно, знаете, после закрытия соединения SSH все выполняющиеся задания будут прерваны. Встаёт вопрос, как сделать так, чтобы команда продолжала выполняться даже после того, как соединение SSH будет закрыто.

Оставляем команду работать после закрытия сеанса SSH

На самом деле, существует множество способов решить эту задачу. Ниже приводятся наиболее простые и понятные.

Для запуска нового сеанса терминала выполните следующую команду:

Теперь можно запустить любую длительную команду. Для того, чтобы отключиться от сессии терминала, нажмите сочетание клавишь Ctrl+A, а затем d. В терминале появится что-то похожее на:

Чтобы вернуться в эту сессию, выполните команду

Вы увидите, что все запущенные процессы продолжают работу.
Если у вас есть несколько открытых сеансов screen , то при подключении нужно будет указать идентификатор сеанса. Для просмотра активных сеансов выполните следующую команду

Результат будет примерно таким:

Если нужно подключиться к сеансу с идентификатором 16648, выполните команду

Утилита tmux представляет собой мультиплексор терминала (мы писали о нём ранее), который позволяет создавать несколько терминалов, доступ к которым осуществляется с одного экрана. Сеансы tmux можно отключать от экрана, при этом они будут продолжать работать в фоновом режиме. Впоследствии к отключенным сеансам можно вернуться, точно так же, как и в случае с утилитой Screen . Для того, чтобы установить tmux в Ubuntu выполните следующую команду:

Для запуска мультиплексора выполните следующую команду:

Для того, чтобы отключиться от сеанса, нажмите в tmux сочетание клавишь Ctrl+b,а затем d. Для получения списка активных сеансов выполните команду

В первом столбце будет указан номер сеанса, который нужно указывать при подключении:

Болшее подробную информацию можно найти в руководстве по tmux.

Утилита nohup позволяет запускать команды, которые будут выполняться даже после отключения сеанса SSH. Это часть основных утилит GNU, и она уже установлена в системе. Использовать команду очень просто. После входа в удалённую систему достаточно выполнить:

И этого достаточно. Теперь можно закрыть закрыть сеанс SSH, удаленная задача будет продолжать выполняться.

Читайте также: