Оставить скрипт bash запущенным на удаленном терминале, пока не залогинен?


14

У меня есть скрипт bash, который запускается несколько часов. Пока он работает, я хотел бы заняться другими вещами, которые могут включать в себя выход из системы или отключение от Интернета (мой скрипт запускает сетевые тесты на разных компьютерах).

Я понимаю, что есть команда, которая позволит мне запускать тесты с удаленного терминала и выходить из него во время его работы. Кто-нибудь знает, что это за команда?

Ответы:


17

Команда, которую вы ищете, это nohup.

Также есть screen, когда вы хотите оставить что-то запущенным, но вернитесь и подключите его позже в интерактивном режиме.

nohupПроще, если команда не ожидает ввода пользователя после запуска, и screenлучше, если вы хотите, чтобы программа могла запускаться в интерактивном режиме.


Я посмотрел на nohup прямо сейчас и, очевидно, есть проблемы с вводом и выводом, которые могут привести к зависанию скрипта. Я также видел кое-что об экране, которое мне показалось тем, о чем я читал раньше. Вы знаете, как использовать любой из них?
Ритвик Бозе

1
nohup предназначен для случаев, когда скрипт не ожидает ввода пользователя - он сохраняет весь вывод в файл. Экран предназначен для тех случаев, когда вы хотите оставить что-то запущенным, а затем вернуться к нему и подключить его интерактивно. nohup проще, если команда не ожидает ввода пользователя после запуска, и экран лучше, если вы хотите быть в состоянии запустить программу в интерактивном режиме.
Джастин Смит

Ах, нашел это. Для экрана это ctrl-A d для отсоединения и -r + pid для повторного подключения.
Ритвик Бозе

Хороший ответ. Вы должны добавить комментарий к экрану к вашему ответу, чтобы он выделялся больше.
DaveParillo

1

Я использую nohupдля этого. В моем случае у меня был скрипт на python, который action.py я запустил на удаленном сервере nohup python action.py & и затем закрыл терминал. Позже, когда он завершит работу, вы сможете увидеть все выходные данные процесса, в nohup.outкотором они будут созданы, в том же каталоге, что и action.py. Если файл уже существует, к нему будут добавлены выходные данные.

Единственная загвоздка в том, что он не знает, когда сценарий завершил свою работу, поэтому в моем случае он дал мне письмо по завершении. Надеюсь, это помогло кому-то!


0

Что произойдет, если вы забыли добавить nohupкоманду в начале вашей команды?

Допустим, вы выполнили следующую длинную команду:

Начало вывода длинной команды

Это называется так ls -Ral /, как будто предполагается перечислить все файлы и все папки, в том числе скрытые, с длинным форматом, рекурсивно начиная с корневой папки. Это может занять некоторое время.

Просто нажмите ctrl+ Z.

Остановка длинной команды

Как вы получите его обратно?

Команда вернуть его на передний план есть fg.

Возвращение Команды обратно

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.