Ние превеждаме - стартираме процеси във фонов режим - различни начини
Задачата е да стартирате процес на отдалечена машина чрез терминален клиент (като putty) и да не се страхувате от прекъсване на връзката. Процесът трябва да продължи да работи на отдалечената машина, докато приключи, независимо дали се изпълнява клиентска сесия или не.
Тази статия не споменава създаването на истински демон (в класическия му смисъл, който стартира от избраното ниво на изпълнение, има свои собствени команди за рестартиране и т.н.), но разглежда еднократно стартиране на скрипт във фонов режим за изчисления, работа по поддръжка и т.н.
Решение №1: екран
Помощната програма за екрана е виртуален терминал, който работи локално на самата машина. Тоест първо се свързваме през мрежата с машината, а след това с локално стартиран терминал, който работи, докато ни няма. В този терминал ние изпълняваме команди.
Debian/Ubuntu: екран за инсталиране на sudo apt-get
Екран за инсталиране на Red Hat/Fedora sudo yum
За да стартирате нов прозорец на екрана, просто го стартирайте с командата screen, след което стартирайте желания процес. Ако трябва да прекъснете връзката от прозореца, тогава трябва да натиснете ctrl + a , след това d - процесът ще продължи във фонов режим. Ако трябва да излезете от екрана, натиснете ctrl+a и k (екранът ще ви помоли да излезете).
След това можете безопасно да прекъснете връзката и да се заемете с бизнеса си. За да се свържете отново с екрана, свържете се с машината и използвайте командата screen -r. Ако са стартирани няколко прозореца, можете да видите техния списък с командата screen -list и да се свържете с screen -r window_name.
Ако процесът трябва да бъде автоматизиран, изпълнете командата с ключовете screen -dmS window_name process. Посочете името на прозореца и процеса и екранът ще работи минимизиран с указаното име на прозореца.
Повече подробности можете да намерите в екрана на човекаи например тук //help.ubuntu.ru/wiki/screen.
Алтернативно решение на screen е tmux
Решение #2: nohup / disown
Ако не се интересувате от време на време да разглеждате изхода на вашите процеси, тогава можете да разгледате по-отблизо командите nohup и disown.
Командата nohup блокира сигнала за прекъсване (клиентът е отпаднал) към процеса. Така стартираме процеса във фонов режим, казваме му да не следва връзката и готово - nohup process_name & процесът работи във фонов режим.
Ако процесът вече работи, но искаме да го поставим на заден план и да го направим демон, тогава
1. Поставете процеса в спящ режим Ctrl+Z
2. Разглеждаме каква работа вече имаме в този режим на работа
3. Прехвърляне на фонов бг [работен_номер_ако_не_е_един]
4. Накарайте демона да се отрече -h [% номер на задание]
Има друго решение за прехвърляне на работещ процес към демон - свързваме се със същата машина в различна сесия, намираме pid на процеса и след това изпълняваме kill -20 PID (прехвърляне в режим на заспиване) и kill -18 PID (продължаване на работата във фонов режим).
Във всеки случай, след някоя от тези манипулации, можете да затворите терминалите и да не се страхувате, че процесите ще паднат.
Решение #3 cron / at
Тук дори няма какво да рисуваме - добавяме еднократна задача в короната или чрез помощната програма at и тя работи във фонов режим в определеното време.
Решение #5 - двойна вилица
Прост, като всички гениални, за bash shell (./program.sh &) & . Стартираме процеса, прехвърляме на заден план, прехвърляме на заден план и убиваме процеса от най-високо ниво, след което процесът се наследява от init.
Решение №5 - Помощни програми, специфични за платформата
Например за Ubuntu start-stop-daemon, за Red Hat daemon и т.н.
Заключение