Запустіть сценарій Bash у фоновому режимі та терміналі виходу


19

Чи можливо запустити команду або термінал виходу сценарію Bash, а НЕ переривати команду?

Моїм рішенням було запустити cron в певний час доби, але я впевнений, що є щось простіше.


Відповіді:


45

Щоб уникнути поширення сигналів виходу на дочірні процеси терміналу та оболонки, запустіть команду nohup, тобто:

nohup cmd &

1
Це правильна відповідь. Без нохупу розпочатий процес все ще вважається "дочірньою" частиною термінального процесу і, таким чином, припиняється, якщо термінал закритий.
Іззі

3
cmd & disownтакож працює, оскільки &трактується як ;роздільник команд. Команда disown видаляє з'єднання між сеансом оболонки bash та фоновою командою.
lornix

2
ЗШ має скорочений для цього: cmd &|.
Тор

Щоб це працювало, мені довелося змінити налаштування в Terminal.app. У розділі "Профілі" виберіть активний профіль, а потім "Шелл"> Коли оболонка вийде> Закрийте, якщо оболонка вийшла чисто
Антоїн

6

Використання screen:

screen -S <session name> -d -m <your command>

після цього ви можете вийти з терміналу, також можете повторно приєднатись до нього:

screen -r <session name>

Більше інформації: довідка


4

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

nohup watch -n5 'bash script.sh' &

Це працюватиме scipt.sh кожні 5 секунд.


1
"nohup" вже охоплений прийнятою відповіддю. І я впевнений, що аскер згадав про cron, тому що вони використовували його, щоб сказати "Запустити цю команду кілька секунд у майбутньому", а не запускати її періодично.
Девід Річербі,

1
Моя відповідь не погіршує справи. Чи бачите сенс голосування проти. Нейронних було б достатньо.
jamietelin

3

Поставте символ "&" після вашої команди.

наприклад:

/home/your/script.sh &

7
в цьому випадку, коли термінал закритий, так і починається процес /home/your/script.sh- як він не був відірваний від свого "батьківського", а просто "фоновий". Використовуйте, nohupщоб від'єднати його від реального.
Іззі

Моє погано, я про це не знав, але коли я тестував свій Debian, команда продовжувала виконувати після закриття оболонки, яка її запустила: /
Flinth

1
Я не впевнений, куди саме додається фоновий процес і коли. Але якщо ви, наприклад, увійдете на віддалену машину, вона, безумовно, припиняється, як тільки ви виходите (за винятком випадків, коли вона демонструвала себе). Отже, щоб бути на 100% впевненим, ви скоріше використовуєте nohup- який також записує весь (зараз невидимий) вихід у файл, який називається, nohup.outв каталозі, з якого ви запустили команду.
Іззі

Гаразд, добре дякую за ваші пояснення ^^
Флінт

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