Найкращий спосіб - запустити процес у термінальному мультиплексорі. Крім того, ви можете змусити процес не приймати сигнал HUP.
Термінальний мультиплексор забезпечує «віртуальні» термінали , які працюють незалежно від «реального» терміналу ( на самому ділі все термінали сьогодні «віртуальні» , але це вже інша тема для іншого дня). Віртуальний термінал буде працювати, навіть якщо ваш справжній термінал закритий вашим сеансом ssh.
Усі процеси, запущені з віртуального терміналу, будуть продовжувати працювати з цим віртуальним терміналом. Після повторного підключення до сервера ви зможете підключитися до віртуального терміналу, і все буде так, ніби нічого не сталося, крім часу, який минув.
Два популярні термінальні мультиплексори - це екран та tmux .
Екран має круту криву навчання. Ось хороший підручник із схемами, що пояснюють концепцію: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
HUP сигнал (або SIGHUP) надсилаються терміналом для всіх його дочірніх процесів , коли термінал закритий. Загальна дія після отримання SIGHUP - це припинення. Таким чином, коли ваш ssh сеанс буде відключений, всі ваші процеси припиняться. Щоб уникнути цього, ви можете змусити ваші процеси не отримувати SIGHUP.
Два простих способи зробити це є nohup
і disown
.
Для отримання додаткової інформації про те, як nohup
і як disown
читати, прочитайте це запитання та відповідь: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
Примітка: хоча процеси триватимуть, ви більше не можете взаємодіяти з ними, оскільки вони більше не приєднані до жодного терміналу. Цей метод в основному корисний для тривалих пакетних процесів, які, запустившись, більше не потребують введення користувача.
screen
дає вам набагато більше варіантів, але якщо ви використовуєте,authorized_keys
щоб дозволити людям дистанційно запускати скриптssh
, цейnohup
варіант є хорошим простим способом для скрипту запускати процеси, які тривають довше, ніжssh
сеанс, який використовується для їх запуску. .