Як запустити скрипт через SSH, який не закінчується, коли я закриваю з'єднання?


18

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

Чи є спосіб запустити скрипт, який не залежить від оболонки, яка його запустила?

Я використовую Ubuntu 9.04.

Відповіді:


24

Ви можете запустити команду за допомогою команди nohup перед нею. Ви також можете запустити його на "екрані", що дозволить вам знову приєднати термінал.

Наприклад:

ssh mySever 'nohup bash myscript.sh'

Або просто ssh у та запустіть команду nohup. Він повинен продовжувати працювати навіть при відключенні. Це тому, що ногуп перехопить сингл SIGHUP (повісити).

Екран трохи більше задіяний, але за 20 хвилин знадобиться освоєння основ, це один з найкорисніших інструментів. Ось підручник .


Знятий Кайл ...> smile <
Еван Андерсон

+1 для кожного, хто чинить Евана. Happy 10K :)
squillman

1
посилання на підручник розірвано :(
Ido Ran

7

Я завжди просто використовую nohup. Якщо я дбаю про вихід, я перенаправляю його в файл журналу, інакше надсилаю його до / dev / null.

Приклад:

nohup scp file.tar.gz root@someserver:/var/tmp > /dev/null 2>&1 &

Це ставить його на задній план, вихід буде переходити до / dev / null, і він не застрахований від сигналу HUP, якщо ви виходите з системи. Ви також можете "відмовитися" від роботи з певними оболонками (наприклад, bash), щоб вона не була пов'язана з вашим сеансом.

disown %1

1
+1 для відмови - дуже корисно, коли ви забудете запустити ногуп
Марк

5

Щоб встановити екран: apt-get install screen

Потім запустіть, використовуючи просто: screen

І man screenщоб отримати ключеву прив’язку.


+1! екран - це річ!
Хав'єр

Раніше я користувався екраном, але перейшов на tmux з різних причин. Google "tmux vs screen", і ви знайдете кілька посилань на кшталт цього: superuser.com/questions/236158/tmux-vs-screen
m0j0

2

Під час входу на сервер ви можете запустити сценарій у відірваному режимі за допомогою наступної команди:

nohup script >script.out 2>script.err &

Пізніше, коли ви знову ввійдете в систему, ви можете перевірити script.out на будь-який вихід, а script.err на наявність будь-яких повідомлень про помилки. Якщо ви хочете повідомлення про вихід та помилки в одному файлі, виконайте такі дії:

nohup script >script.out 2>&1 &
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.