Как позволить процессу продолжать работать даже после отключения ssh?

Как насчет:

perl -e 'print sort map {s/(\d).*(\w)\..*//r} <>' 

(Требуется perl 5.14+ - вероятно, он уже установлен в вашей системе)

Использует встроенный бит кода Perl, который :

  • читает <> , который является STDIN или файлами, указанными в командной строке.
  • Использует заменяющее регулярное выражение, которое захватывает цифру (\ d) и букву непосредственно перед . (\ w) \.
  • затем возвращает преобразованную строку. r флаг регулярного выражения.
  • использует карту для итерации STDIN .
  • и сортируют , чтобы ... ну, сортировать.
  • и напечатайте , чтобы распечатать его.

Вывод:

1 a
1 b
1 c
2 e
3 d

Альтернативно:

perl -e '%x=map {open($f,'<',$_); @f=<$f>; $_=>''.@f} @ARGV;print "$x{$_} $_\n" for sort {$x{$a}<=>$x{$b}} keys %x;' ~location/folder/folder/*.log 
0
30.12.2018, 22:35
2 ответа

Для этого можно использовать экран.

https://www.gnu.org/software/screen/

Шаги:

  1. Открыть сеанс ssh как обычно.
  2. Экран установки. (Если еще не установлено)
  3. начать новый сеанс экрана. (Просто введите screen и нажмите Enter)
  4. Запустите свою команду так, как она есть
  5. Введите ctrl + 'a', затем отпустите клавиши Ctrl и a и нажмите 'd', чтобы отключить сеанс экрана.

Сеанс продолжает работать в фоновом режиме. Даже если вы выйдете из системы и полностью закроете сеанс ssh.

Если вы используете корпоративный Linux, такой как Centos, вы можете использовать yum для установки screen из репозитория пакетов дистрибутива.

yum -y install screen

Если вы используете ОС на базе Debian, попробуйте использовать:

apt-get install screen

После установки запустите новый сеанс screen, просто набрав screen.

[user@localhost ~]$ экран

Note: This will clear the screen and start a new session.

Запустите свою команду:

[user@localhost ~]$ rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

Отключить сеанс экрана:

ctrl +a, d

[отдельно]

Вы можете убедиться, что ваш процесс все еще работает, с помощью netstat. Если ваша ОС поддерживает это, вы можете использовать флаг -p, чтобы показать идентификатор запущенного процесса.

-p, --program Show the PID and name of the program to which each socket belongs.

[user@localhost ~]$ netstat -anp | grep 1234
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 127.0.0.1:1234              0.0.0.0:*                   LISTEN      30599/nc

И вы можете использовать ps, чтобы показать, что процесс все еще выполняется:

[user@localhost~]$ ps -ef | grep [3]1037
500      31037 31019  0 21:45 pts/2    00:00:00 nc -l 127.0.0.1 1234

Note: placing square braces '[]' around the first number of the pid, is a little regex trick to avoid showing the grep process itself. Essentially a false match, and not your actual process.

Вы можете показать сеанс отсоединенного экрана с помощью screen -ls

[user@localhost~]$ screen -ls
There is a screen on:
        30562.pts-0.localhost  (Detached)
1 Socket in /var/run/screen/S-user.

И вы можете повторно -прикрепить к нему экран -r или экран -x и имя сеанса

[user@localhost ~]$ screen -x 30562.pts-0.localhost
1
28.01.2020, 02:23

Вы хотите использовать nohupдля запуска ваших команд даже после закрытия соединения ssh(удаленный оператор вешает трубку). Процедура такая же, как и в этом ответе:

nohup sh -c 'rm -f /tmp/f ; mkfifo /tmp/f && cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f'
2
28.01.2020, 02:23

Теги

Похожие вопросы