Читать в телеге. Когда-то там были посты не только от меня.
Запуск команды на нескольких серваках
Что делать, если надо запустить одну и ту же команду на нескольких серваках?
Варианты:
-
parallel-ssh. Тупо заходит на сервак по ssh и выполняет команду (нужно настроить беcключевой доступ). Дешево и сердито
-
puppet. Упрощенно - это такая штука, где можно писать в декларативном стиле “на этом серваке должны быть поставлены такие-то пакеты, должен быть запущен такой-то сервис, развернута база с определенными таблицами и т.п.”. Сервер хранит сведения о том, что должно быть на каждой ноде, а на нодах стоит агент, который периодически запрашивает с сервера, что у него должно быть и сравнивает со своим текущим состоянием. Если не совпало - исправляет это. Для этой штуки есть букет плагинов (но не очень высокого качества), имеет смысл, только если проект довольно большой, долгий и есть похожие ноды (есть потенциал добавления новых нод).
-
ansible - это parallel-ssh на стероидах. Претендует на то, чтобы быть заменой puppet, однако качество плагинов к нему очень низкое (по крайней мере те, с которыми я работал). Хипстерская хрень, насчет которой стоит трижды подумать, прежде чем использовать
Включение любого файла в сишный код
Если надо “вкомпилить” какой-нибудь бинарник в сишный файл. Для этого можно использовать команду xxd
:
xxd --include filename
Выведет что-то вроде:
unsigned char filename[]={ 0x48, ...};
unsigned int filename_len = 123;
Интерактивное обучение git
Интерактивное изучение git в игровом формате. На мой взгляд - отличная штука, чтобы обучать новичков. https://learngitbranching.js.org/
Моржовый оператор в питоне
В октябре релизнулся Python 3.8. Среди нововведений - моржовый оператор, который позволяет делать присваивание внутри другого выражения:
# So instead of
a = some_func()
if a:
print(a)
# Now you can concisely write
if a := some_func():
print(a)
и, разумеется, можно сделать так:
a = 5
d = [b := a+1, a := b-1, a := a*2]
потенциальный undefined behavior, добро пожаловать в питон!
Если интересна тема, как можно плохо что-то делать в питоне или нужен источник паззлеров для него, то можно почитать https://github.com/satwikkansal/wtfpython
Тяжелые задачи с ssh
Запускать длительные задачи на серваке через ssh надо через nohup. Ибо если это не сделать, то при обрыве ssh-сессии (что равносильно закрытию “терминала”) процесс завершится.
nohup запускает команду “в отрыве” от терминала. При выходе из него (при завершении сессии ssh) задача останется.
Если вы запустили что-то тяжеленное и забыли про nohup, то на помощь придет disown
.
- Нажимаем ctrl+Z, чтобы поставить выполнение задачи на паузу
jobs -l
- получаем список задач, находим там нужный IDbg ID
- запускаем задачу в фонеdisown PID
- отвязываем от терминала