Чи буде мій запит MySQL продовжувати працювати, навіть якщо моє ssh з'єднання перестане?


16

Я підключився до сервера через SSH та увійшов до mysql і попросив його запустити запит (результати якого скидаються в CSV), який може зайняти більше години. Хоча я доручив моєму клієнту надсилати нульові пакети кожні 60 секунд, щоб тримати сеанс активним, я все одно параноїдаю, що запит / процес mysql може завершитися, тому мої запитання:

  1. Чи може скасований сеанс ssh (через бездіяльність) вбити процес запиту mysql?
  2. Як я можу переконатися, що цього не відбувається - чи вистачає нульового пакету кожні 60 секунд?

Відповіді:


9

Більшість оболонок відправляють SIGHUP до групи процесів переднього плану при виході (а в деяких і фонових процесах, також у bash це керується параметром оболонки huponexit), що може спричинити його загибель, залежно від того, як обробляє ваш клієнт mysql.

Ви можете запустити свою команду, попередньо встановлену nohupдля того, щоб оновити її init, якщо ваша оболонка виходить, незалежно від того, передає ваша оболонка SIGHUP чи ні (відремонтована інітом не пов’язана конкретно з nohup - це просто те, що вона пережила свого батьківського).

Можливо , більш прийнятне рішення було б використовувати tmux, screen, dtachабо аналогічні для запуску клієнта абстрагується від вашої оболонки і керуючого терміналом. Таким чином, якщо ваша оболонка відключається, ви просто підключитесь до сеансу, в якому ви виконували запит.

Як правило, пакети збереження не матимуть значення, з'єднання просто не припиняється без будь-якої причини. Більш актуальною проблемою буде втрата зв'язку між клієнтом та сервером з інших причин (поломка мережі тощо).


Дякую! Тільки для уточнення, я запускаю власне запит у mysql - так що, поки я буду nohupробити вхід у mysql, це буде зберігати запити, що працюють всередині?
njp

1
@njp Якщо ви хочете працювати в інтерактивному режимі, вам nohupне принесуть великої користі, оскільки mysql REPL не буде приєднаний до терміналу. Спробуйте скористатись одним із мультиплексорів (або dtach), про який я згадував вище, вони, можливо, краще відповідають вашим потребам.
Кріс Даун

2

Я почав бігати screen сеанси, коли я впадаю в поле, частково, щоб запобігти цьому, і як додатковий бонус, я отримую кілька вкладок, не можу його перемогти. Якщо я відключений з якихось причин, я можу знову приєднатися до екранного сеансу.

Оновлення

Щоб відповісти на №2, я б побіг mysql з баш-файлу через екранний сеанс. Звучить складно, але це просто:

$: screen
$: mysql

Ви можете відредагувати файл ~ / .screenrc, щоб додати підписи внизу екранного сеансу, щоб ви могли відслідковувати свої вкладки, перейменовувати вкладки тощо. Якщо ви коли-небудь відключалися, при повторному підключенні просто запустіть

$: screen -d

і це покаже будь-які окремі сеанси. Для повторного приєднання просто запустіть щось на кшталт

$: screen -r 551.pts-0.git

Або будь-який ідентифікатор екранного сеансу. Ви прямо там, де ви зупинилися. Ви повинні запуститись screen -dяк той самий користувач, який розпочав сеанс на екрані, проте, просто fyi, або root, звичайно. Я не дуже впевнений, тому що після того, як я впадаю, я завжди sudo su -не хочу судити кожну команду.


1
Незважаючи на те, що порада щодо використання screenзвучить, вона не відповідає безпосередньо на два питання, перелічені ОП.
Барун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.