Я сам работаю на Linux Mint, у меня есть удаленный VPS-сервер Ubuntu с root-доступом по ssh. у меня есть скрипт на сервере, который делает долгую обработку данных (часы или даже дни обработки).
Теперь я могу открыть консоль на своей машине, подключиться к VPS через ssh и запустить скрипт - я вижу, что скрипт делает в реальном времени в моей консоли (сколько данных обработано, сколько осталось и так далее, регулярно обновляется на экране моей консоли) - это работает.
Как я могу сделать подобное, но без зависимостей моей локальной машины:
я так думаю screen
это идеальное решение для вас. Как это работает - вы подключаетесь к своему VPS, набираете screen
, затем запустите свой сценарий и отсоединитесь от оболочки (либо закройте окно терминала, либо нажмите ctrl+a
с последующим ctrl+d
)
Ваш скрипт (и оболочка) будут продолжать работать в фоновом режиме. Вы можете просмотреть screen
номер, набрав screen -ls
. Чтобы восстановить сеанс и увидеть прогресс / результат вашего скрипта, получите номер экрана с помощью screen -ls
а затем подключитесь к нему с помощью screen -r <screen number>
. И это все. После восстановления вы можете снова отсоединить таким же образом.
Вы можете установить экран на свой VPS с помощью apt-get install screen
для дистрибутивов на основе Debian и yum install screen
для дистрибутивов на основе RedHat.
Вы также можете запустить сценарий в фоновом режиме и получить доступ к выходным данным, когда они вам понадобятся. Мой тестовый сценарий будет довольно простым:
root@jump:~# cat test.sh
#!/bin/bash
for ((i=0; i<=99999; i+=1)); do
echo $i
sleep 1
done
Он просто печатает число в секунду. Чтобы запустить его в фоновом режиме, я буду использовать:
root@jump:~# at now
warning: commands will be executed using /bin/sh
at> /root/test.sh
at> <EOT>
Примечание: EOT выполняется с помощью Control & D. После этого дайте скрипту поработать, отключитесь от сервера. Если вы хотите увидеть результат, подключитесь и найдите PID процесса:
root@jump:~# ps aux | grep test
root 6312 0.0 2.1 18048 2836 ? SN 13:08 0:00 /bin/bash /root/test.sh
И получите результат. Замените 6312 на PID вашего процесса:
root@jump:~# tail -f /proc/6312/fd/1
137
138
139
140
141
^C
fd / 1 = стандартный вывод, fd / 2 = стандартный поток