Запустите скрипт на удаленном хосте, не заботясь о сеансе ssh - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть скрипт Python в папке на удаленной машине.Для его выполнения я делаю ssh-сеанс с локального компьютера, захожу в эту папку и запускаю.

Команды, которые я использую:

ssh remotehost
user@remotehost:~$ cd /my/folder
user@remotehost:~$ python abc.py >> abc.log

Теперь проблема в ssh-сессии.Сценарий занимает много времени, и из-за проблем с интернетом ssh-сессия завершается, а сценарий не завершается.Предположим, что пульт дистанционного управления всегда запущен и работает.

Могу ли я запустить скрипт, не заботясь о завершении сеанса ssh, и в любое время выполнить tail -f abc.log с ssh?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вы можете запустить скрипт на экране или запустить процесс в nohup + bg.Я всегда предпочитаю Screen, но позвольте мне объяснить оба метода.

1.nohup

Вы можете использовать команду nohup для запуска процесса, отсоединив от терминала, как это nohup python /my/folder/abc.py & По умолчанию создается файл nohup.out , где всежурналы будут сохранены.Если вам нужен пользовательский файл, то вы можете использовать перенаправление, тогда оно будет nohup python /my/folder/abc.py >> abc.log &

В одной команде это будет

ssh user@remotehost 'nohup python /my/folder/abc.py >> abc.log &'

nohup wikipedia

2.Экран

Из документов.

Экран - это полноэкранный оконный менеджер, который мультиплексирует физический терминал между несколькимипроцессы, как правило, интерактивные оболочки.Каждый виртуальный терминал обеспечивает функции терминала DEC VT100 и, кроме того, несколько функций управления из стандартов ISO 6429 (ECMA 48, ANSI X3.64) и ISO 2022 (например, строка вставки / удаления и поддержка нескольких наборов символов).Для каждого виртуального терминала имеется буфер истории прокрутки и механизм копирования и вставки, который позволяет пользователю перемещать текстовые области между окнами.

Когда вызывается экран, он создает одно окно с оболочкой в ​​нем.(или указанная команда), а затем исчезает, чтобы вы могли использовать программу, как обычно.Затем в любое время вы можете создавать новые (полноэкранные) окна с другими программами в них (включая другие оболочки), убивать текущее окно, просматривать список активных окон, включать и выключать выходной журнал, копировать текст междуокна, просматривать историю прокрутки, переключаться между окнами и т. д. Все окна запускают свои программы полностью независимо друг от друга.Программы продолжают работать, когда их окно в настоящее время не видно и даже когда весь сеанс экрана отсоединен от терминала пользователя.

Руководство по экрану

Таким образом, выВы можете напрямую запускать скрипт на экране, используя ssh, а затем вы можете просматривать журналы в любое время, либо подключаясь к экрану, либо перенаправлять журналы в какой-либо файл напрямую или перенаправлять в файл и выводить его с помощью tee.

Запустить команду на экране и напечатать вывод в stdout (терминал).

ssh user@remotehost '(screen -dmS ScreenName bash -c "python /my/folder/abc.py; exec bash")'

Запустить команду на экране и перенаправить вывод в файл.

ssh user@remotehost '(screen -dmS ScreenName bash -c "python /my/folder/abc.py >> abc.log &2>1; exec bash")'

Запустить команду ввывод на экран и перенаправление как в файл, так и в stdout (терминал).

ssh user@remotehost '(screen -dmS ScreenName bash -c "python /my/folder/abc.py &2>1 |tee abc.log; exec bash")'

Примечание: во всех вышеперечисленных командах необходим exec bash, иначе экран завершится после выполнения заданиязавершает.

Любой из вышеперечисленных commansd должен выполнить эту работу.
Во всех вышеперечисленных случаях вы можете прикрепить экран ScreenName с помощью screen -r ScreenName и видеть журналы.
Я всегда рекомендую перенаправление stderr при перенаправлении в файл.

некоторые ссылки на использование экрана linux

  1. 10 Примеры экранных команд для управления терминалами Linux
  2. Как использовать экран Linux
0 голосов
/ 13 сентября 2018

Это зависит от того, какие инструменты установлены на удаленном компьютере, к которому вы подключаетесь. Мне известны два основных инструмента: GNU screen и tmux. Я использую экран, поэтому я дам вам некоторые основы того, как вы бы это использовали. Вы можете начать как обычно и начать сеанс экрана перед выполнением скрипта Python:

ssh remotehost
user@remotehost:~$ cd /my/folder
user@remotehost:~$ screen
user@remotehost:~$ python abc.py >> abc.log

Затем вы можете отсоединиться от сеанса экрана, и скрипт python продолжит работать, даже если ваше соединение ssh потеряно.

Для отсоединения:

Нажмите Ctrl-A и d

Для повторной проверки:

screen -r

Чтобы отобразить сеансы экрана:

screen -ls

Чтобы убить текущий сеанс экрана:

Нажмите Ctrl-d

Существует намного больше функций для экрана. Это хороший ресурс для начала работы:

Для получения более подробной информации см. Руководство:

...