PuTTY або ІНШЕ - Тримайте виконання команди навіть після виходу з PuTTY [дублікат]


13

У мене є кілька команд, які мені потрібно виконати. Ці команди потрібно постійно виконувати навіть після виходу з інтерфейсу. Коли я маю доступ до GUI Linux, я виконую щось таке:

cd /home/testuser/Scripts*
xterm -hold -T "Background_Script1" -e  "service1-start.sh" &
sleep 10
xterm -hold -T "Background_Script2" -e "service2-start.sh" &

Будь-яка допомога буде дуже вдячна.



Чи є якась причина, чому ви не запускаєте ці служби як демони?
SevenSidedDie

Чи призначені команди бути службами, які повинні працювати у майже 100% безперервного часу "назавжди", або тривалим завданням обробки, яке, як очікується, закінчиться через деякий час? Усі відповіді будуть "спрацьовувати" для обох випадків, але правильна рекомендація буде різною.
Петерсіс

Який конкретний дистрибутив Linux ви використовуєте? Я виявив, що запуск set -m;робить це так, що мої сценарії продовжують працювати після того, як я вийду з CentOS та RHEL.
ArtOfWarfare

Відповіді:


33

Спробуйте

nohup Background_ScriptX &

nohup гарантує, що процес не припиняється, коли термінал закритий. Символ & відсуває процес на другий план.

Сподіваюся, що це було корисно.


nohup, безумовно, справляється із справою
Пітто

Радий за допомогу.
Еймонн Траверс

15
екран має одну явну перевагу перед nohup : nohup не дозволяє повернутися до запущеної команди (наприклад, наступного ранку, щоб прочитати її stdout, а потім вибрати, щоб його вбити тощо). екран дозволяє зробити саме це.
Андреас F

1
nohup посилає вихід у файл, де він може бути оброблений.
Брайан Кноблауш

Для тих, хто nohupне знайомий, це, в основному, "без затримки" - при nohup HUPсигнал hangup ( ) ігнорується.
Dan7119

20

Якщо ви хочете прочитати висновок пізніше, ви можете використовувати screen:

screen -d -m my_command

Це дає вам відокремлений термінал, до якого можна підключитися пізніше ( screen -r), щоб прочитати висновок stdout / stderr.


2
+1. Для одного, якщо ви закриєте свій термінал (наприклад, шпаклівка), а потім знову відкриєте його і повторно прикріпите до екрана ( screen -r), ви також матимете весь результат своєї програми, і в іншому випадку ви б "пропустили". Крім того, екран може зробити так багато дивовижних речей, як розділені екрани тощо! :)
Альберто Сантіні

6

Інший варіант, якщо nohupкоманда недоступна - це використовувати команду відключення .

Спочатку ви можете переглянути фонові завдання, запустивши jobsв терміналі. Ви можете отримати номер роботи звідти.

Тепер просто запустіть, disown %[job number]і процес буде від'єднаний від поточного терміналу і залишиться живим, коли ви виходите з системи.

Побічна примітка. Переконайтеся, що ви ставите правильне запитання. Якщо ви користуєтесь фактичними службами, як ви натякаєте у вашому зразку, ви, можливо, захочете вивчити, як створити демон в ОС на ваш вибір. Це робиться для того, щоб процес все-таки запускався після перезавантаження та зробити його більш узгодженим з іншими службами.

Сподіваюсь, це допомагає.


3

З тих screenпір, як уже згадувалося: там є інші термінальні мультиплексори. Мені tmuxдуже подобається , дивіться, наприклад, це інше питання про суперпопулярність , tmux vs screen для порівняння.


0

Ви також можете спробувати: setsid Setsid також працює з фоновими програмами та дозволяє їм продовжувати працювати після відключення сеансу термінал / ssh.

Використовуйте його так:

setsid program-to-background

Manpage: http://man7.org/linux/man-pages/man2/setsid.2.html

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