Как предотвратить смерть программы, когда ее сеанс ssh умирает?

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

  • пользователь использует специальный эмулятор терминала для подключения к удаленному компьютеру через ssh
  • пользователь запускает сценарий оболочки
  • сценарий оболочки может начать длительный процесс обработки базы данных.

Очевидно, что иногда пользователи просто теряют соединение ssh с машиной, и в этом случае сеанс ssh завершается, скрипт оболочки, запущенный внутри, завершается, и, наконец, процесс базы данных прогресса также прекращается. В одном случае из тысячи это вызывает коррупцию в базе данных, поэтому я хотел бы предотвратить ее.

То, что я пробовал до сих пор:

  • начиная с экрана или сеанса tmux перед запуском сценария оболочки – это не работает, потому что для приложения требуется переменная TERM, которая должна быть установлена ​​на значение386 (и она обходит termcap / terminfo полностью … ugh …)
  • nohup / отключить процесс выполнения – это не сработает, потому что сценарий оболочки и процесс прогресса непрерывно обмениваются друг с другом неясными способами

Любая другая идея о том, как убедиться, что процесс прогресса не завершится, когда сеанс ssh убит?

4 Solutions collect form web for “Как предотвратить смерть программы, когда ее сеанс ssh умирает?”

Добавьте term at386 к вашему .screenrc, чтобы переопределить TERM. Если это не помогает, попробуйте dtach вместо Screen (который сам не использует эмуляцию терминала).

Во многих случаях самым простым решением является использование nohup и включение неинтерактивного процесса в фоновый режим с использованием & и перенаправления стандартного вывода и стандартной ошибки в файлы.

Другими словами, вы ищете что-то вроде экрана, но это передает контрольные последовательности терминалу, а не выполняет собственный перевод? Попробуйте dtach . Он обеспечивает ту же функцию отрыва терминала, что и экран, но без нескольких окон или эмуляции терминала.

Возможно, попробуйте удаленный рабочий стол X через vnc или nx. Вы можете туннелировать vnc поверх ssh для обеспечения безопасности или использовать nx, который выполняется по ssh по умолчанию (и намного быстрее). Затем приложение может работать в терминале на рабочем столе X, и если соединение будет потеряно, рабочий стол продолжит работу, разрешая пересоединение в любое время. Мое предпочтение – отсутствие машины NX, которая бесплатна для двух одновременных пользователей и устанавливается очень легко.

Альтернативой, если доступно, является использование удаленной консоли через ALOM, ILOM, DRAC, IP-kvm или IP-последовательную консоль и т. Д. Таким образом, приложение будет работать на консоли и не может быть прервано сбоем подключения ,

  • rsync'ing несколько пар {src, dest}
  • Где SSH вытащить автозаполнение?
  • SSH завершает работу после выхода из сценария bash
  • Может ли пользователь linux изменить свой пароль, не зная текущего пароля?
  • Отсоединить / перезапустить приложение, запущенное на X поверх SSH?
  • SSH во многие системы с ключами RSA без кода доступа
  • Создание переменной по ssh в bash
  • SSH: какой из них - мой открытый ключ
  • Исправить поврежденную / bin / sh ссылку
  • почему экран x11 не будет работать через ssh?
  • Вставка некоторого текста с вкладками в документ здесь в окне PuTTY
  • Interesting Posts

    Пустые подсказки кодов MATLAB в Gnome 3, Debian Jessie

    Попытка проверить целостность файла с помощью GnuPG. «ПЛОХАЯ подпись» все время

    Режим перехвата SQUID с использованием внешней проверки подлинности и ICAP с адаптационным_send_username не работает

    Не удалось установить том XFS после перезагрузки – неизвестная файловая система типа «xfs»

    Как создать новый файл и отредактировать его как root?

    Как измерить сетевой трафик (с помощью pfSense / freeBSD)?

    Должен ли я использовать / dev / sda или / dev / sdb в fstab при загрузке с USB?

    Ошибка установки карты SD

    Почему не удается удалить пользователя в Raspbian?

    Извлечение определенных строк набора, соответствующих правилу

    ЖК-подсветка Sysfs в качестве теплового устройства

    Тонкая настройка для производительности

    Измените приглашение PS1 в подэлементе sh, вызванном из родительского bash

    Выполнить файл, если команда не найдена

    BASH: количество слов в каждой строке документа

    Linux и Unix - лучшая ОС в мире.