Що станеться з продовженою операцією, якщо ми виконаємо ssh, а потім відключимось?


10

Я переміщую один каталог до іншого за допомогою команди mv.

Однак мене змусили вимкнути комп’ютер, що означає втрату зв’язку з сервером.

Що трапиться з командою mv?

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

Це я ssh to centosh на хмарному сервері steadfast.net.


Гадаю, це призведе до помилки щодо недоступності джерела / місця призначення
SHW

1
переміщення каталогу до іншого - "миттєве", якщо вони перебувають на одному розділі. І навіть якщо ви переміщуєте файли на файли, це може бути швидким. Ви впевнені, що це продовжувалося після відключення (замість того, щоб закінчити, поки різні сигнали SIGHUP надсилаються дочірнім процесам, які можуть зайняти деякий час [на комп’ютерній шкалі].
Олів'є Дулак

як вирішення, використовуйте screenабо tmuxколись увійти в систему, щоб запустити віртуальний термінал, який продовжить працювати при відключенні [тобто ви можете пізніше приєднатись до нього і побачити термінал у тому ж стані, як ви його залишили, а також будь-які оновлення в між]
Олів'є Дулак

Відповіді:


19

Якщо mvбуло розпочато так:

ssh host mv x y

Тоді mvви отримаєте SIGPIPE (і помре), якщо він спробує написати що-небудь до stdout або stderr (наприклад, повідомлення про помилку).

Якщо ви розпочали інтерактивний сеанс, наприклад:

ssh host

І почалося mvз інтерактивної оболонки там, коли головна сторона запущеного псевдотерміналу sshdбуде закрита (після sshзакриття TCP-з'єднання при виході), лідер сеансу, пов'язаний з веденою стороною псевдотерміналу, є віддаленою інтерактивною оболонкою, отримає сигнал SIGHUP (зависнути).

Після отримання цього сигналу снаряди (якщо ви не видали trap '' HUP) зазвичай передають цей сигнал усім процесам у розпочатих завданнях, якщо ви прямо не сказали йому цього (як, наприклад, з disownабо &|в деяких оболонках).

Інші процеси (як-от mv), як правило, загинуть при отриманні цього сигналу, якщо їм не наказали ігнорувати його (використовуючи nohupабо якщо їх батько проігнорував).

Якщо ви видали:

trap '' HUP

Тоді всі завдання, розпочаті після того, як він успадкує його, і ігнорує SIGHUP.

Оболонка не загине від сигналу SIGHUP, що надсилається при відключенні, але вийде в наступний рядок, оскільки його stdin відсутній. Після виходу деякі снаряди відправляють SIGHUP на свої (не відкликані) завдання. Ті, що почалися після trap '' HUPзаповіту, ігнорують його, інші загинуть.

Коротше кажучи, у такому випадку, якщо ви не вжили попередніх заходів, щоб цього не сталося, ви mvпомрете.

Щоб уникнути цього в наступний раз, якщо використовується tcsh, zshабо bash, перш ніж вимкнути машини, натисніть Ctrl-Zпризупинити mv, введіть bgвідновити його в фоновому режимі, і disownв відхрестився його.

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

Або використовуйте nohup mvдля того, щоб зробити mvімунітетом SIGHUP і отримати його вихід та помилки, перейдіть у nohup.outфайл, який ви можете перевірити пізніше.

Тепер я не знаю про вашого конкретного хостинг-провайдера, але з деякими, коли ви sshвходите в екземпляр, ви не починаєте там сеанси оболонки, а скоріше приєднуєтесь до консолі, тобто до вже розпочатого сеансу. , і коли ви виходите, ви не припиняєте сеанс, а просто відхиляєтесь від нього. Отже, шкаралупа не вбиває, як і не mv. Якщо це так, ви помітите, що psзапуск звідти дає вам те саме pidдля вашої оболонки протягом двох окремих sshсеансів.


Отже, ви говорите, що телевізор буде припинено. Ну, будь ласка, перевірте замітку.
user4951

2
+1. непересічна відповідь (оскільки вона вникає в деталі, щоб пояснити, що відбувається і коли).
Олів'є Дулак

Я склав статтю на основі ваших відповідей . Сподіваємось, хтось знайде це корисним.
x-yuri
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.