Запустите сценарий оболочки и немедленно отправьте его в фоновый режим, однако сохраняйте возможность проверять его вывод
Как я могу запустить сценарий оболочки и немедленно запустить его в фоновом режиме, однако сохраняйте возможность проверять его вывод в любое время, задав /tmp/output.txt
Было бы хорошо, если бы я мог опередить процесс слишком поздно.
PS Было бы очень здорово, если бы вы также могли показать мне, как "отправить" фоновый процесс на экран GNU, который может быть инициализирован или нет.
4 ответа
Чтобы "фон" процесс, когда вы запускаете его
Просто добавьте амперсанд (&
) после команды.
Если программа пишет в стандартный поток, она все равно будет записывать данные на вашу консоль / терминал.
Чтобы выдвинуть на первый план процесс, просто используйте fg
команда.
(Вы можете увидеть список заданий в фоновом режиме с jobs
.)
например:
sh -c 'sleep 3 && echo I just woke up' & jobs
Чтобы создать фон для текущего запущенного процесса
Если вы уже запустили процесс на переднем плане, но хотите переместить его на задний план, вы можете сделать следующее:
- Нажмите Ctrl+z, чтобы перевести текущий процесс в спящий режим и вернуться в свою оболочку. (Этот процесс будет приостановлен, пока вы не отправите ему другой сигнал.)
- Запустить
bg
Команда возобновить процесс, но запустить его в фоновом режиме, а не на переднем плане.
Другой способ заключается в использовании nohup
команда с &
в конце строки.
Что-то вроде этого
nohup whatevercommandyouwant whateverparameters &
Это запустит его в фоновом режиме и отправит вывод в файл nohup.log.
Современный и простой в использовании подход, который позволяет управлять несколькими процессами и имеет приятный пользовательский интерфейс терминала, бесполезен .
Установить с помощью
pip install hapless
(или же
python3 -m pip install hapless
) и просто беги
$ hap run my-command # e.g. hap run python my_long_running_script.py
$ hap status # check all the launched processes
$ hap logs 4 # output logs for you 4th background process
$ hap logs -f 2 # continuously stream logs for the 2nd process
См. документы для получения дополнительной информации.
Я пыталсяnohup
но мой процесс остановился через день или два, поэтому я попробовал этот простой скрипт bash, чтобы перезапустить мою команду после ее остановки
run.sh
while true; do
[ -e stopme ] && break
python3 main.py # your command here
done
тогда делай
nohup bash run.sh &