В то время как не точно, что Вы спросили, Вы могли использовать
#!/bin/bash -o pipefail
так, чтобы Ваши каналы возвратили последнее не нулевой возврат.
мог бы немного меньше кодировать
Править: Пример
[root@localhost ~]# false | true
[root@localhost ~]# echo $?
0
[root@localhost ~]# set -o pipefail
[root@localhost ~]# false | true
[root@localhost ~]# echo $?
1
Использовать nohup
заставить Ваш процесс проигнорировать сигнал зависания:
$ nohup long-running-process &
$ exit
Вы хотите использовать Экран GNU. Это является супер потрясающим!
ssh me@myserver.com
screen #start a screen session
run-a-long-process
CTRL+a, d для отсоединений от экранной сессии
exit #disconnect from the server, while run-a-long-process continues
Когда Вы возвращаетесь к своему ноутбуку:
ssh me@myserver.com
screen -r #resume the screen session
Затем проверьте прогресс своего продолжительного процесса!
screen
очень всесторонний инструмент и может сделать намного больше, чем, что я описал. В то время как на экранной сессии, попробуйте ctrl+a? изучить несколько общих команд. Вероятно, наиболее распространенные:
screen -d -r
гарантировать, что, если другая оболочка присоединена к моей экранной сессии, это будет отсоединено, прежде чем я возобновлю его на своей существующей системе.screen -S name
и позвольте своему другому другу соединиться с ним с screen -x name
.
– Patrick
06.10.2010, 12:23
tmux
с tmuxinator
большая комбинация для необычных установок, в то время как я предпочитаю screen
как быстрое и простое решение.
– earthmeLon
19.06.2014, 18:31
То, что Вы хотите использовать, является экраном или еще лучше удобной для пользователя оберткой вокруг экрана, названного byobu.
Экран позволяет Вам выполнять несколько сессий виртуального терминала на той же ssh сессии. Учебное руководство и страницы справки доступны.
byobu является оберткой, которая позволяет легко открывать новые экраны с простой функциональной клавишей вместо сочетания клавиш от ctrl-a. Это также показывает строку состояния со всеми открытыми виртуальными терминалами, которые можно назвать.
Другой хорошей функцией является то, что весь Ваш экран может не лечь спать, в то время как Ваше соединение SSH разъединяется. Вы просто соединяетесь снова через ssh и называете byobu, и все похоже прежде.
Наконец некоторые снимки экрана byobu.
Если Вы не запланировали заранее и устанавливаете screen
, и т.д. просто сделайте следующее:
Если Ваш процесс работает в фоновом режиме: goto № 3, еще: Ctrl-Z
приостановить приоритетный процесс. Это сообщит о задании # приостановленного процесса, например:
[1]+ Stopped processName
Отправить processName
к фону с bg %1
(использующий безотносительно задания # следует %
). Это возобновится processName
в фоновом режиме.
Отрицать processName
с disown %1
или disown PID
. Используйте -h
отметьте, если Вы хотите поддержать владение, пока Вы не завершаете свою текущую оболочку.
&
когда я запустил его. Это, кажется, работает отлично!
– Matt
25.03.2012, 18:42
Могло бы стоить отметить это
ssh -t lala screen -rxU moo
присоединит к сессии мычания на хосте lala
ssh -t lala screen -S moo
создаст сессию мычания на хосте lala
и
ssh -t lala screen -S moo quux
создаст сессию мычания на хосте lala и запустит программу quux, выходя из сессии на завершении.
Я использую NX NoMachine, который свободен для меня, потому что это - только я. По существу это выполняет X сессий на сервере, с которым можно соединиться и разъединить из-за и. X сессий продолжают бежать, когда Вы не соединены. Связи могут быть установлены отовсюду. Можно выбрать между плавающими окнами или единственным окном, содержащим целый рабочий стол (например, полный рабочий стол Gnome). Клиент (который Вы работали бы на своем ноутбуке) может быть выполнен на Linux, MacOS, Солярисе или Microsoft Windows. В последнем случае, если Вы выбираете плавающие окна, они появляются индивидуально в Windows Taskbar.
Я использую свой ноутбук Windows XP (в котором я нуждаюсь для определенных определенных для Windows аппаратных средств, которые я имею) как фронтэнд для моих двух серверов Linux с помощью NX Nomachine. Я могу даже распечатать к принтеру, подключенному к моему ноутбуку Windows из Linux.
Я решил свою собственную проблему.
Я открыл командную строку в окнах как администратор и ввел эту команду.
bcdedit/set {bootmgr} path\EFI\ubuntu\grubx64.efi
. Затем выключить не перезагрузить (я не знаю, если это имеет значение), то меня приветствовало очень знакомое меню grub:
Клянусь, что я уже пробовал это, но я попробовал это до того, как я сделал boot-repair, так что, может быть, это мог быть один из факторов, почему на этот раз он работал, а также, может быть, отключение вместо перезагрузки после bcdedit
Частные пространства монтирования, созданные с помощью команды unshare
файл private/etc/hosts для процесса оболочки и всех последующих дочерних процессов, запущенных из этой оболочки.
# Start by creating your custom /etc/hosts file
[user] cd ~
[user] cat >my_hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 news.bbc.co.uk
EOF
[user] sudo unshare --mount
# We're now running as root in a private mountspace.
# Any filesystem mounts performed in this private mountspace
# are private to this shell process and its children
# Use a bind mount to install our custom hosts file over /etc/hosts
[root] mount my_hosts /etc/hosts --bind
[root] cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1 news.bbc.co.uk
[root] exec su - appuser
[appuser] # Run your app here that needs a custom /etc/hosts file
[appuser] ping news.bbc.co.uk
PING news.bbc.co.uk (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.062 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.026 ms
^C
--- news.bbc.co.uk ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.026/0.044/0.062/0.018 ms
-121--1508- Старый вопрос, странно все же никто не советовал tmux , который действует как обертка для n консолей и держать их открытыми до необходимости. Это позволяет больше управлять, помимо ряда функций tmux имеет. Управлять им несложно, вы просто выполняете tmux, который приводит вас в свою оболочку, запускаете задание поиска, затем нажимаете ctrl + b, за которым следует d (отсоединить) ( ctrl + b
- «ok google» tmux, а d
- команда закрыть без выхода из оболочки). Это на самом деле работает, если просто закрыть, например, замазку. После обеда при повторном подключении можно снова открыть tmux с помощью tmux attach
, чтобы увидеть экран точно так, как вы ушли. Что-то, что я люблю, это разделение области: ctrl + b
и затем нажмите "
. Чтобы перейти из одной области в другую, ctrl + b
, а затем нажмите стрелку вверх/вниз.
Вы можете найти хорошее руководство здесь: Keep Your SSH Session Running when You Disconnect
sudo apt-get install screen
Теперь вы можете начать новый сеанс экрана, просто набрав screen в командной строке. Вам будет показана некоторая информация об screen. Нажмите Enter, и вы окажетесь в обычном приглашении.
Чтобы отключиться (но оставить сеанс запущенным) Нажмите Ctrl + A, а затем Ctrl + D в мгновенной последовательности. Вы увидите сообщение [detached]
To reconnect to an already running session
screen -r
To reconnect to an existing session, or create a new one if none exists
screen -D -r
To create a new window within a running screen session. Нажмите Ctrl + A и затем C в мгновенной последовательности. Появится новое приглашение.
Для перехода от одного окна экрана к другому Нажмите Ctrl + A, а затем Ctrl + A последовательно.
Чтобы составить список открытых окон экрана Ctrl + A и затем W последовательно
Tmux — хороший вариант для запуска долго -запущенных процессов в фоновом режиме.
Мне приходится продолжать выполнять -длительно работающие процессы на экземпляре/сервере виртуальной машины облачной платформы Google (с ОС :Ubuntu 16.0 ). Там, где мне нужно запустить SSH-терминал и с терминала, я должен держать терминал подключенным, чтобы запустить процесс. Теперь до этого все хорошо. Но подождите, если соединение с моим SSH-терминалом прервется, то длительные -запущенные процессы немедленно остановятся, и, следовательно, мне придется повторно -запустить их еще раз после перезапуска ssh-терминала или с нового ssh-терминала.
Я считаю, что tmux
— это хорошее решение, позволяющее избежать завершения процессов, которые мы хотим запустить, даже после закрытия терминала.
Терминальный мультиплексор(tmux
)для запуска сеанса tmux
:
tmux
. Откроется окно в том же терминале. Теперь, даже если SSH-терминал внезапно закрывается/прекращается, сессия tmux продолжит выполнение запущенных lon -запущенных процессов на экземпляре/сервере.
Если соединение прервано, то как переподключить его, чтобы увидеть процессы, запущенные в сеансе tmux в фоновом режиме:
tmux attach
. Хотите завершить сеанс tmux:
exit
в окне терминала tmux --.(Обратите внимание, что :Если мы используем tmux detach
команду :, она выйдет из окна/терминала сеанса tmux без прерывания/остановки сеансов tmux)
Подробнее см. следующую статью:
Если вы хотите запустить процесс в не -интерактивном сеансе ssh (, поэтому tmux
и screen
отсутствуют ), вы можете:
ssh SERVER 'nohup bash -c "echo start; sleep 10; echo finish"'
Процесс будет продолжен, если сеанс ssh прерван, но вы не можете повторно подключиться, чтобы увидеть его результат.
ssh SERVER 'nohup bash -c "(echo start; sleep 10; echo finish)|tee -p /tmp/log"'
Это покажет вам вывод во время сеанса ssh, и если он отключится, tee -p
продолжит запись в файл /tmp/log
.
Примечание :, поскольку сеанс не является интерактивным, вы не можете использовать &
, чтобы перевести задание в фоновый режим.
В 2021 году мы также можем предложить для дистрибутивов Linux с systemd использоватьsystemd-run
как способ отсоединить процесс и сохранить его работу после закрытия входа в систему по ssh.
Можно запустить command
и позже проверить статус:
systemd-run --unit=background_cmd_service --remain-after-exit command
# later on
journalctl -b -u background_cmd_service
systemctl status background_cmd_service
При запуске службы от имени обычного пользователя может потребоваться включить задержку (ср. enable-linger
опция loginctl ). Это верно даже для nohup, поскольку systemd очищает все службы, запущенные в сеансе, после выхода пользователя из системы.
nohup
SIGHUP прерываний так, чтобы, когда оболочка, которая выполнила его, выходит и отправляет SIGHUP всем своим все еще рабочим детям,long-running-process
не умирает.disown
просто удаляет указанное задание из дочернего списка Bash, таким образом, это не попытается отправить SIGHUP вообще.nohup
программа, отдельная от оболочки, таким образом, она работает со всеми оболочками, тогда какdisown
встроенный Bash.nohup
принимает, что команда работает, тогда какdisown
только работы после задания запускаются, и у Вас есть фон оно так, можно возвратиться к оболочке. – Warren Young 15.08.2010, 17:00tail -f nohup.out
проверять, что продолжается, когда Вы вернулись. – Ricardo Stuven 03.11.2016, 17:15