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.