Як я можу підтримувати процес живим після закриття сеансу шпаклівки?


41

Я використовую шпаклівку для взаємодії з сервером Linux. Я розпочав процес з використанням шпаклівки. Процес працює і триватиме 5-6 годин. Я хочу, щоб цей процес продовжував працювати після закриття сесії шпаклівки. Як я можу підтримувати цей процес живим після закриття сеансу шпаклівки? Я не хочу весь час утримувати комп’ютер. Чи можна це зробити ?.

Відповіді:


32

Я використовую екран для таких матеріалів. Насправді іноді я просто залишаю це на досить довгий час, щоб я міг повернутися до того, що робив.


Зараз процес працює, чи працює він для цього процесу? Я запитую, бо процес знаходиться посередині, і я не хочу його перезавантажувати зараз

+1 для згадування мого безперечного улюбленого інструменту командного рядка. Це дорогоцінний камінь у подібних ситуаціях.
Нуфал Ібрагім

@Noufal, повністю! @prakash, перед запуском будь-яких процесів потрібно запустити екран
ziya

Якщо ви хочете підключитися до декількох машин, це навіть може бути приємна ідея запустити кілька екранів на першому екрані, тому вам просто доведеться підключитися до одного екрану, щоб отримати доступ до всіх запущених віддалених пристроїв.

посилання більше не працює
Malky.Kid

31
^Z
bg %1
disown -h %1

Після завершення сеансу "-h" робить процес незахищеним від SIGHUP.


3
Зауважте, що немає ніякого способу «відновити» або «прийняти» процес - коли ви це зробите, ви ніколи не зможете повернути його на перший план. Якщо процес - це пакетне завдання, яке працює над створенням деяких файлів, це не має значення.

19

Використовуйте nohupкоманду. Просто приставте його до своєї команди, і це покаже їх, щоб вони не зупинялися, коли ви виходите з системи або закінчуєте сеанс оболонки. Стандартний вихід за замовчуванням буде у файлі під назвою nohup.out. Перегляньте сторінку керівництва для nohup(1)отримання додаткової інформації.


процес працює, чи працює він для цього процесу? Я запитую, оскільки процес знаходиться посередині, і я не хочу його перезапустити зараз?

Занадто пізно ... принаймні, для звичайних операцій. Не дивно, якщо ви приєднаєте налагоджувач до процесу, а потім налаштуєте його відповідним набором системних викликів, то, можливо, ви зможете поставити його на другий план. Але це не те, що можна було б рекомендувати - я б, наприклад, не переймався, і маю хоч якесь уявлення про те, що може бути пов'язане. Зараз у вас є два варіанти ... або залишайтеся на зв’язку, поки він не закінчиться, або зупиніть поточний процес і перезапустіть новий, використовуючи nohup.
Джонатан Леффлер

1
Якщо ви використовуєте bash (і я думаю, що zsh), ви можете використовувати рішення та disownпроцес Тома Андерсона, щоб він продовжував працювати навіть при відключенні.
Нуфал Ібрагім

Так, відхилення виглядає як шлях до вже запущеної роботи. Це можливо, оскільки оболонка, яка розпочала роботу, може маніпулювати необхідними властивостями.
Джонатан Леффлер

5

Почніть процес із nohup "processname" &. Ви також можете від'єднати його за допомогою screenабо tmux.


3

Вищезазначені рішення досить добре описані, однак жодне з них не працювало на мене, доки я також не редагував конфігурацію PuTTY:

Увімкнути збереження TCP (опція SO_KEEPALIVE)

Я ніде цього не бачив і просто знайшов це шляхом спроб та помилок.


1

Ctrl + z Надіслати поточний процес на задній план.

Крім того, ви можете додати & в кінці своєї команди для запуску у фоновому режимі


4
Зазвичай, control-z приводить процес у стан призупиненої анімації; команда bg ставить її на другий план. Однак це також зберігає процес, приєднаний до терміналу, тоді як nohup від'єднує його від терміналу і, таким чином, дозволяє шпаклівці відключитися і процес пережити відключення.
Джонатан Леффлер

Я виявив, що використання "&" для надсилання до фону працює з шпаклівкою, але коли я підключаю, використовуючи безпосередньо ssh з оболонки, якщо я закриваю з'єднання, фоновий процес знищується. Будь-яка ідея, чому?
Zardoz89

0

Якщо ви хочете, щоб програма, яка міститься в процесі, завжди або часто запускалася у фоновому режимі, ви можете кодувати її, щоб вона відокремилася від керуючого терміналу (зробіть таку поведінку керованою через прапор опції) і запустити у фоновому режимі.

Це, звичайно, довгострокове рішення, не для поточного запущеного процесу.


0

Ви можете використовувати &після посилання.

Приклад:

[localhost ~ ]# wget http://www.link.com/download/download.zip &

Питання полягало не в посиланні, ви маєте на увазі додати &знак після командного рядка?
Денні

0

Як зберегти роботу веб-журналу після закриття вікна шпаклівки:

Прості кроки: після входу через шпаклівку виконайте наступні кроки:

  1. Перейдіть до каталогу на сервері, де знаходиться startWebLogic.shкоманда.
  2. Введіть команду screenта натисніть Enter(відкриється новий екран).
  3. На новому екрані введіть команду run ./startWebLogic.sh.
  4. Натисніть Ctrl+, aпотім натисніть d(не утримуючи Ctrl); ви повернетесь до попереднього екрана.
  5. Коли ви хочете повернутися до екрана журналу сервера, введіть команду screen -r.

0

якщо процес призначений для nodejs, і він може бути вашим наміром, оскільки ви спочатку опублікували це в stackoverflow. Я спочатку сам шукав це питання. Я знайшов pm2, і це дивно. Інші відповіді можуть допомогти для загальної шпаклівки, але якщо конкретний вузол, це, безумовно, найкраща відповідь, оскільки вбудований моніторинг, а налаштування - просто

$ npm install pm2 -g
$ cd yourappdirectory

"PM2 - це менеджер виробничих процесів для додатків Node.js із вбудованим балансиром навантаження. Це дозволяє постійно зберігати програми в режимі життя, перезавантажувати їх без простоїв та полегшувати поширені завдання системного адміністратора.

Запустити програму у виробничому режимі так само просто: "

$ pm2 start yourappname.js

"за допомогою команди збереження та заморожування ви дозволяєте процесам автозапуститись при перезавантаженні"

$ pm2 save
$ pm2 freeze

для моніторингу його

$ pm2 monit

і перезапускається

$ pm2 restart yourappname

також для інформації прямого журналу

$ pm2 logs

Тепер я можу легко запустити два шпаклівки, а не використовувати вікно браузера digialocean (яке я не міг прокрутити вгору); Для отримання додаткової інформації дивіться основний github

https://github.com/Unitech/pm2

це дивовижно.


Можете чи ви пояснити трохи більше про те, який PM2 є і те , що команди , які ви показати робити? Будь ласка, не відповідайте на коментарі; відредагуйте  свою відповідь, щоб зробити її більш зрозумілою та повною.
G-Man каже: "Відновіть Моніку"

Додано трохи більше документації для спільноти. Я б хотів, щоб я знайшов вечір 2 року тому.
сасі рішення
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.