Блог им. AVBacherov
Если вы не только что стали моим подписчиком, то наверняка в курсе, что я полностью перешел на Linux и даже написал пост о моем опыте: Месяц на ALT Linux на рабочей машине...
Но сейчас хотел поделиться кое-чем полезным, а заодно останется это в ленте, потому что когда ты редко пользуешься чем-то, то забываешь, и нужно снова вспоминать. Поэтому данный пост также послужит лично мне напоминалкой.
Сейчас люди настолько привыкли к графическим оболочкам (линуксоиды их называют ГУИ, GUI — Graphical user interface), что мало кто представляет себе возможность что-то делать на компьютере с помощью командной строки. А между тем, командная строка очень мощный и в определенных случаях очень полезный инструмент. В Linux его довели до совершенства. Конечно, большинству людей она не понадобится, но при этом она остается очень полезной сисадминам и программистам.
Мои программы написаны на python и их очень удобно запускать прямо из командной строки. Достаточно написать:
python3 my_python_script.py
И программа начинает выполняться, выдавать расчеты, графики и т.п.
Но бывают случаи, когда программы имеют сервисный характер. Например, мне нужно в свою базу SQL дописать новые данные по котировкам, дивидендам, процентным ставкам и т.п. Или как в случае с расчетам большого числа статистических показателей, с последующим их сохранением в той же SQL. Запустить такой скрипт из под своей учеткой можно, но придется ждать когда он закончит работу, потому что при выходе из учетки будут остановлены все процессы запущенные пользователем. Конечно, можно оставить компьютер включенным на ночь, пусть работает, а потом утром прийти и посмотреть что получилось. Но куда как лучше пойти более правильным путем.
Мы привыкли в ГУИ запускать сразу много процессов/программ. Сейчас мы не задумываемся об этом, но это режим многозадачности, к которому путь был не столь прост. Это прекрасно помнят те, кто начинал знакомства с компьютерами, еще когда были такие операционные системы как DOS. В командной строке чтобы реализовать этот процесс, придется немного постараться. Когда мы пишем команду или запускаем программу/скрипт, то он начнет выполняться и пока не закончится его работа, доступ для вводу следующей команды будет заблокирован. Чтобы можно было работать параллельно с несколькими программами в командной строке Linux придумали возможность запускать программы в фоновом режиме. Для этого в конце строки после ввода команды достаточно поставить значок "&". Тогда команда будет выполняться, а вы можете продолжить вводить другие команды. Но проблема в том, что если вы отключитесь от терминала как пользователь, то такие процессы тоже будут остановлены, а правильнее сказать завершаться. Получается, что запуск в фоном режиме сервисного ПО не дает преимуществ, так как все равно придется оставить тот компьютер включенным, с которого вы эти команды подавали. Например, я подключился к своему серверу с помощью удаленного подключения через терминал (есть такой протокол SSH) и запустил выполнение в фоновом режиме своего сервисного скрипта написанного на python. Как только я отключусь от сервера, работа этого скрипта будет прекращена. Получается, я все равно вынужден оставить свой компьютер в рабочем режиме, и более того не отключаться от терминала. А если произойдет какой-то сбой на сети и меня просто выкинет с удаленного подключения. Это тоже приведет к остановки выполнения программы на сервере. Поэтому мне не достаточно запустить программу в фоновом режиме. Мне надо сделать так, чтобы при отключении она продолжала выполняться на сервере.
В Linux это можно реализовать следующим интересным и простым способом.
Есть такая команда nohup. Она позволяет запустить выполнения программы в фоновом режиме и организовать вывод лога (то что программа нам выдает при ее выполнении) в отдельный файл. Тогда запуск моего скрипта python будет выглядеть так:
nohup python3 my_python_script.py > log.txt &
Теперь программа будет выполняться а все что она выдает будет записано в файл log.txt
С помощью команды:
jobs -l
я могу посмотреть, какие сейчас выполняются команды запущенные мной, а также их ID присвоенный компьютером. Но проблема все равно остается в том, что при отключении от терминала, эти процессы будут завершены.
Чтобы не дать им завершится, мне надо «перенести» или правильно сказать «отвязать» выполнение моего скрипта от терминала с которого я его запустил. Для этого я подам еще одну команду:
disown ID
После нее процесс выполнения моей команды уже не будет привязан к моему терминалу, и она сможет выполняться даже после моего выхода или потери соединения с сервером. Но тогда я уже не смогу посмотреть с помощью «jobs -l» выполняется моя программа или нет. Для этого я должен буду использовать другую команду:
ps -aux
или если я хочу посмотреть только те команды выполнения, которые связанны с python, то:
ps -aux | grep python
Таким образом, я в итоге могу подключиться к серверу, запустить в фоновом режиме выполнение своего скрипта python, отвязать его от текущего терминала и отключиться, зная что он продолжит выполняться до тех пор пока не закончит свою работу. При этом я могу в любой момент снова подсоединится к серверу и проверить, продолжает ли скрипт выполняться. А также посмотреть в log.txt процесс его выполнения.
Например на следующих двух скринах показан лог по расчету статистических показателей по 51-ой акции для глубин 1, 3, 5 и 10 лет, с последующей записью их в SQL.
Это очень удобно. Мне нет необходимости держать включенным мой рабочий компьютер, а подобные сервисные вещи можно легко делать удаленно. Не стоит говорить, что можно написать отдельный скрипт, который вообще будет запускаться автоматически на сервере, выполнять все программы и записывать их в лог.
Автоматизируйте свои исследования в области инвестиций. Это экономит массу времени.
Доктор, этож альтлинукс))
у них бессмысленные действия — девиз))
обновляется и без всяких там впн в лисе настроил адблок всей рекламы!
тор воткнул ходить на некоторые ресурсы.
через кюркод параллельно открывает соцсети что и на телефоне .
если в игрушки не рубитесь то и винда не нада!
хватитает и смотреть ютуб и кинозалы.
пользовался системами сбора данных и делал бекапы на стримеры-ленточные ибм и тп экзобайты сказевые..
мало-мало пришлось изучать работу через терминал,
было много всего !
небыло интерфейса удобного еще, вином из строки мультимедиа запускали смотреть..
игрушки аркады еще типа мальстрима и рэйс с пингвином.
так нынешний алт и минт это уже теперь как проще некуда!
nohup python3 my_python_script.py &> log.txt &
так как просто > редиректит только стандартный поток вывода в лог, а есть ещё поток ошибок, и &> редиректит их в файл обоих
например, просмотр видео прямо в консоли, без всякой гуи…
Какие показатели считаете, это типа машинное обучение?