Профессиональная деформация
ㅤ
Каждый раз когда вижу урл вида:
Невольно тянется рука поставить в конце символ
Башкой понимаю, что в современном мире такое сработает 1 раз на 100кк, но ничего поделать с собой не могу. Когда видишь потенциальную дырку — нужно попробовать вставить.
А какая у тебя деформация? Поделись своим скелетом в комментах😲
🛠 #трудовыебудни
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Каждый раз когда вижу урл вида:
https://bashdays.ru/?p=4893
Невольно тянется рука поставить в конце символ
' и посмотреть что будет. Башкой понимаю, что в современном мире такое сработает 1 раз на 100кк, но ничего поделать с собой не могу. Когда видишь потенциальную дырку — нужно попробовать вставить.
А какая у тебя деформация? Поделись своим скелетом в комментах
Кстати LF подорожал, кто не успел или кого выперло, заходите, раздам 30 промокодов по 1000 рубасов. Для тех кто уже занимается, повышений не будет.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотелось бы поговорить о гувернантках, но будем обсуждать губернаторов. (governors).
🔤 🔤 🔤 🔤 🔤 🔤 🔤
Сейчас практически везде идет борьба за экологию, поэтому производители пытаются делать процы «зелеными». Есть нагрузка - частоту поднимают, нет нагрузки - частоту снижают и сразу падает тепловыделение и энергопотребление.
ㅤ
Так вот, управляют частотой/производительностью/энергопотреблением специальные алгоритмы, которые называются governors. Чтобы было проще выбирать, их наштамповали несколько видов:
К сожалению не все губеры доступны для вашей системы. Список доступных можно посмотреть так:
Вот, у меня на ноуте доступны только два: performance schedutil
Используемый в настоящее время:
Обратите внимание, governor задается для каждого ядра отдельно.
Ну, и для чего это нужно. Иногда бывают процелюбивые задачи. (кодирование видео и аудио, конверсия фоток, многопоточная компрессия, шифрование...)
И пофигу на электроэнергию и тепловыделение, лишь бы быстрее закончилась. Тогда можно на время выполнения задачи изменить governor.
Делается это простым скриптом:
Если все делать в ручном режиме. Поменять governor для всех ядер можно командой:
здесь
Такая установка проживет до перезагрузки. Если требуется постоянные настройки - можно поставить в
Продолжение следует.
🛠 #cpu #performance #frequency #governor
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Сейчас практически везде идет борьба за экологию, поэтому производители пытаются делать процы «зелеными». Есть нагрузка - частоту поднимают, нет нагрузки - частоту снижают и сразу падает тепловыделение и энергопотребление.
ㅤ
Так вот, управляют частотой/производительностью/энергопотреблением специальные алгоритмы, которые называются governors. Чтобы было проще выбирать, их наштамповали несколько видов:
performance — максимальная производительность (Ну, почти максимальная)powersave — максимальное энергосбережениеondemand — быстрое изменение частоты от нагрузкиconservative — медленное изменение частоты от нагрузкиschedutil — интеграция с планировщиком ядра LinuxК сожалению не все губеры доступны для вашей системы. Список доступных можно посмотреть так:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
Вот, у меня на ноуте доступны только два: performance schedutil
Используемый в настоящее время:
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
Обратите внимание, governor задается для каждого ядра отдельно.
Ну, и для чего это нужно. Иногда бывают процелюбивые задачи. (кодирование видео и аудио, конверсия фоток, многопоточная компрессия, шифрование...)
И пофигу на электроэнергию и тепловыделение, лишь бы быстрее закончилась. Тогда можно на время выполнения задачи изменить governor.
Делается это простым скриптом:
#!/bin/bash
declare -a KEEP_GOVERNOR
declare DIR_PREFIX=/sys/devices/system/cpu
declare SET_GOVERNOR='performance'
declare -i NPROC=$(nproc) # число ядер (процессоров)
declare -i PRESENT=0
#Проверка поддержки governor системой
for G in $(cat "$DIR_PREFIX/cpu0/cpufreq/scaling_available_governors");do
if [[ "$SET_GOVERNOR" == "$G" ]];then
PRESENT=1
break
fi
done
if !((PRESENT));then
echo GOVERNOR $SET_GOVERNOR not supported.
printf "Available governors : "
cat "$DIR_PREFIX/cpu0/cpufreq/scaling_available_governors"
exit 1
fi
# Keep current setting
I=NPROC
while ((I--));do
KEEP_GOVERNOR[$I]=$(cat "$DIR_PREFIX/cpu${I}/cpufreq/scaling_governor")
done
# Set (Для установки требуются привилегии)
I=NPROC
while ((I--));do
echo "$SET_GOVERNOR">"$DIR_PREFIX/cpu${I}/cpufreq/scaling_governor"
done
#Здесь ВАШ код
sleep 10
##############
# Restore settings
I=NPROC
while ((I--));do
echo "${KEEP_GOVERNOR[$I]}">"$DIR_PREFIX/cpu${I}/cpufreq/scaling_governor"
done
Если все делать в ручном режиме. Поменять governor для всех ядер можно командой:
sudo echo performance| sudo tee /sys/devices/system/cpu/cpu{0..1}/cpufreq/scaling_governorздесь
performance - задаваемый governor{0..1} - описание числа процессоров (ядер). Для шестнадцати {0..15}.Такая установка проживет до перезагрузки. Если требуется постоянные настройки - можно поставить в
cron @reboot, прописать в grub или воспользоваться специальными утилитами.Продолжение следует.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Здесь я рассказал, как просто управлять производительностью сервера с помощью governors.
🔤 🔤 🔤 🔤 🔤 🔤 🔤
ㅤ
Но есть еще один способ: Прямое управление частотой.
Дело в том, что governor задает только скорость нарастания и убывания частоты, в зависимости от нагрузки. Сами частоты заданы в файлах:
Но и пределы частоты тоже можно менять.
Правда на некоторых процессорах их нельзя менять произвольно, их список может быть жестко задан. Обычно список допустимых частот описан в файле
(это для нулевого ядра)
У меня на ноуте, например, 1350000 1200000 1000000
Посмотреть частоты можно здесь:
👆 Надеюсь, всем понятно, что разогнать проц данным способом не получится.
Таким образом, командой типа:
Любой governor превращается в performance. Пути к файлам я опустил, и на всякий случай напомню, что частоты задаются для каждого ядра отдельно.
Кстати, повышать частоты требуется не всегда.
Приведу пример:
У меня работает роутер на мини-PC. Если использовать его только как роутер - нагрузка максимум 5%.
Я поставил туда торрент-качалку. А она может загрузить проц, даже если использовать
Теперь мини-PC холодный, даже если прикидывается сервером и работает на 100% (В полку).
Код для установки максимальной производительности получается несколько проще, чем с governor:
Всем стабильных серваков!
🛠 #cpu #performance #frequency #governor
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Но есть еще один способ: Прямое управление частотой.
Дело в том, что governor задает только скорость нарастания и убывания частоты, в зависимости от нагрузки. Сами частоты заданы в файлах:
/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freqscaling_cur_freqscaling_max_freqНо и пределы частоты тоже можно менять.
Правда на некоторых процессорах их нельзя менять произвольно, их список может быть жестко задан. Обычно список допустимых частот описан в файле
/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies(это для нулевого ядра)
У меня на ноуте, например, 1350000 1200000 1000000
Посмотреть частоты можно здесь:
cpuinfo_min_freq - минимальная частота ядраcpuinfo_cur_freq - текущаяcpuinfo_max_freq - максимальная👆 Надеюсь, всем понятно, что разогнать проц данным способом не получится.
Таким образом, командой типа:
cp cpuinfo_max_freq scaling_min_freqЛюбой governor превращается в performance. Пути к файлам я опустил, и на всякий случай напомню, что частоты задаются для каждого ядра отдельно.
Кстати, повышать частоты требуется не всегда.
Приведу пример:
У меня работает роутер на мини-PC. Если использовать его только как роутер - нагрузка максимум 5%.
Я поставил туда торрент-качалку. А она может загрузить проц, даже если использовать
nice. Но я задал минимальную частоту в качестве максимальной:cp cpuinfo_min_freq scaling_max_freqТеперь мини-PC холодный, даже если прикидывается сервером и работает на 100% (В полку).
Код для установки максимальной производительности получается несколько проще, чем с governor:
#!/bin/bash
declare -a KEEP_MINFREQ
declare DIR_PREFIX=/sys/devices/system/cpu
declare -i NPROC=$(nproc) # число ядер (процессоров)
# Keep current setting
I=NPROC
while ((I--));do
KEEP_MINFREQ[$I]=$(cat "$DIR_PREFIX/cpu${I}/cpufreq/scaling_min_freq")
done
# Set
I=NPROC
while ((I--));do
# Поднимаем минимальную частоту до максимума
cp "$DIR_PREFIX/cpu${I}/cpufreq/cpuinfo_max_freq" "$DIR_PREFIX/cpu${I}/cpufreq/scaling_min_freq"
done
#Здесь ВАШ код
sleep 10
##############
# Restore settings
I=NPROC
while ((I--));do
echo "${KEEP_MINFREQ[$I]}">"$DIR_PREFIX/cpu${I}/cpufreq/scaling_min_freq"
done
Всем стабильных серваков!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
CPU AFFINITY
🔤 🔤 🔤 🔤 🔤 🔤 🔤
Предыдущие статьи по настройке производительности Здесь и Здесь:
В современных системах число ядер только растет. И запущенный процесс гуляет по ядрам, как разочаровавшаяся в любви девушка.
ㅤ
Таким образом планировщик системы пытается балансировать нагрузку, ресурсы (и тепловыделение). Но это поведение можно изменить.
С помощью программы можно taskset можно запускать процессы на указанных ядрах.
Например:
Запустит
Фактически
Если использовать ключик
Современные процессоры имеют гибридную архитектуру. Т.е. они содержат и энергоэффективные и производительные ядра.
Так вот, с помощью этой команды можно немного оптимизировать производительность - ограничивая второстепенным приложениям доступ к высокопроизводительным ядрам.
Ну, или для всей «шушеры» выделить пару ядер, освободив остальные для самых важных процессов.
Но если Вам лень этим заниматься - знайте, что планировщик и так неплохо справляется. Единственное, чего он не знает - какие процессы для Вас более важные. Но ему всегда об этом можно напомнить, с помощью команды nice.
Ну, и напоследок - вредный совет.
Однажды у моего коллеги на работе эффективные менеджеры ввели KPI.
Деньги начали платить по проделанной, а не стабильной работе. После этого у всех, включая бухгалтерию в конце квартала все начинало тормозить Но не сразу, а как-то плавно, но заметно.
И приходилось проводить сложную многочасовую оптимизацию систем (оптимизация дисков, переиндексирование, очистка кэшей...). После которой все до конца следующего отчетного периода работало нормально.
А потом - о5-25.
Но как они этого добивались - я не знаю :-)
🛠 #cpu #core #taskset #nice #perfomance
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
По просьбе коллеги @dox89.
Предыдущие статьи по настройке производительности Здесь и Здесь:
В современных системах число ядер только растет. И запущенный процесс гуляет по ядрам, как разочаровавшаяся в любви девушка.
ㅤ
Таким образом планировщик системы пытается балансировать нагрузку, ресурсы (и тепловыделение). Но это поведение можно изменить.
С помощью программы можно taskset можно запускать процессы на указанных ядрах.
Например:
taskset --cpu-list 0-2,6 thunderbird
Запустит
thunderbird, и разрешит почтовому клиенту работать только на указанных ядрах.Фактически
taskset не разрешает работать на указанных ядрах, а запрещает работать на всех остальных, потому что по умолчанию любому процессу можно работать на всех ядрах.Если использовать ключик
-p PID, то аналогичную процедуру можно выполнить с уже запущенным процессом.Современные процессоры имеют гибридную архитектуру. Т.е. они содержат и энергоэффективные и производительные ядра.
Так вот, с помощью этой команды можно немного оптимизировать производительность - ограничивая второстепенным приложениям доступ к высокопроизводительным ядрам.
Ну, или для всей «шушеры» выделить пару ядер, освободив остальные для самых важных процессов.
Но если Вам лень этим заниматься - знайте, что планировщик и так неплохо справляется. Единственное, чего он не знает - какие процессы для Вас более важные. Но ему всегда об этом можно напомнить, с помощью команды nice.
Ну, и напоследок - вредный совет.
Однажды у моего коллеги на работе эффективные менеджеры ввели KPI.
Деньги начали платить по проделанной, а не стабильной работе. После этого у всех, включая бухгалтерию в конце квартала все начинало тормозить Но не сразу, а как-то плавно, но заметно.
И приходилось проводить сложную многочасовую оптимизацию систем (оптимизация дисков, переиндексирование, очистка кэшей...). После которой все до конца следующего отчетного периода работало нормально.
А потом - о5-25.
Но как они этого добивались - я не знаю :-)
man tasksetman nice—
Please open Telegram to view this post
VIEW IN TELEGRAM
Борьба за производительность
В продолжение истории борьбы за производительность.
🔤 🔤 🔤 🔤 🔤 🔤 🔤 🔤
Допустим у нас есть что-то, что обладает каким-то неприличным количеством ядер, например 16.
ㅤ
И нам надо разбалансировать эти ядра между разными «типами» нагрузки.
Причем мы точно знаем, сколько ядер нам надо для одного типа и точно не знаем, сколько нужно для всего остального.
Тут на помощь приходят 4 параметра ядра -
В рамках решаемого кейса сразу указал на них, что сократило поиск необходимых решений.
По сути, все 4 параметра решают одну задачу - ограничить использование указанных ядер (например 0-3) процессами, за исключением базовых - init, scsi и прочих.
Таким образом мы можем через тот же
В данной картине мы защищаем этот сегмент от службы
Но будьте внимательны при изоляции, так как в случае количества процессоров > 1 нужно чуть иначе выставлять диапазоны, чтобы не угодить в яму NUMA. Там деление ядер от 0 до последнего происходит сегментами по очереди.
Конкретно мой случай изоляции был применен в рамках разделения нагрузки на сетевые прерывания и nginx, но в совокупности факторов - параметры ядра, отключенный + маскированный
🛠 #cpu #core #taskset #nice #perfomance
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
В продолжение истории борьбы за производительность.
Допустим у нас есть что-то, что обладает каким-то неприличным количеством ядер, например 16.
ㅤ
И нам надо разбалансировать эти ядра между разными «типами» нагрузки.
Причем мы точно знаем, сколько ядер нам надо для одного типа и точно не знаем, сколько нужно для всего остального.
Тут на помощь приходят 4 параметра ядра -
isolcpus, nohz_full, rcu_nocbs и irqaffinity.В рамках решаемого кейса сразу указал на них, что сократило поиск необходимых решений.
По сути, все 4 параметра решают одну задачу - ограничить использование указанных ядер (например 0-3) процессами, за исключением базовых - init, scsi и прочих.
Таким образом мы можем через тот же
taskset указать вручную на ядра 0-3 те процессы, что нам нужны.В данной картине мы защищаем этот сегмент от службы
irqbalance, которая с завидным упорством будет ребалансировать процессы между ядрами.Но будьте внимательны при изоляции, так как в случае количества процессоров > 1 нужно чуть иначе выставлять диапазоны, чтобы не угодить в яму NUMA. Там деление ядер от 0 до последнего происходит сегментами по очереди.
Конкретно мой случай изоляции был применен в рамках разделения нагрузки на сетевые прерывания и nginx, но в совокупности факторов - параметры ядра, отключенный + маскированный
irqbalance, taskset и еще несколько твиков - давало профит только при утилизации сетевой карты лишь до 70%, дальше спецэффекты постепенно возвращались.—
Please open Telegram to view this post
VIEW IN TELEGRAM
Опять потерял заявку? Не ты один
Когда в компании появляются десятки или сотни запросов: на оборудование, доступы, оплату или закупку — без системы они начинают теряться. Кажется, что все под контролем, но на деле у каждого отдела складываются разные процессы: кто-то пишет в личку, некоторые отмечают в табличке, а кто-то “давай голосом”.
12 ноября в 17:00 пройдет вебинар «Как упорядочить работу со входящим потоком задач». Покажут, как один раз настроить все процессы в Яндекс Трекере и больше никогда не искать, куда пропала заявка. Расскажут, почему важно вести всё через Трекер, как документировать процессы в Вики, автоматизировать назначение ответственных и какие фишки автоматизации используют сами в Яндексе.
Ведут вебинар руководитель продуктового направления Трекера Данил Майорский и архитектор решений и амбассадор Трекера Татьяна Родина. Полезно всем, кто регулярно в работе использует таск-менеджеры: IT-руководителям, администраторам, HR, AХО и тем, у кого входящих задач больше, чем часов в сутках.
Регистрируйся по ссылке.
#workflow #автоматизация #трекер
Когда в компании появляются десятки или сотни запросов: на оборудование, доступы, оплату или закупку — без системы они начинают теряться. Кажется, что все под контролем, но на деле у каждого отдела складываются разные процессы: кто-то пишет в личку, некоторые отмечают в табличке, а кто-то “давай голосом”.
12 ноября в 17:00 пройдет вебинар «Как упорядочить работу со входящим потоком задач». Покажут, как один раз настроить все процессы в Яндекс Трекере и больше никогда не искать, куда пропала заявка. Расскажут, почему важно вести всё через Трекер, как документировать процессы в Вики, автоматизировать назначение ответственных и какие фишки автоматизации используют сами в Яндексе.
Ведут вебинар руководитель продуктового направления Трекера Данил Майорский и архитектор решений и амбассадор Трекера Татьяна Родина. Полезно всем, кто регулярно в работе использует таск-менеджеры: IT-руководителям, администраторам, HR, AХО и тем, у кого входящих задач больше, чем часов в сутках.
Регистрируйся по ссылке.
#workflow #автоматизация #трекер
HRы и еже с ними, ловите головастого DevOps отличника и LF выпускника.
Резюмирую
Мужчина в полном рассвете сил (26 лет), хочет на удаленку. Есть большое желание развиваться дальше, делать вещи и пилить охуительные инфраструктурные циркули.
Не пиздит и не завышает опыт, а это уже ценно!
Шарит за:
- докеры, пайплайны, ансиблы, кубы, графики и т.п.
- спец по информационной безопасности (PT SIEM),
- автоматизация на bash, python
Короче базовый набор маст-хев практик из коробки.
Нанимаешь и он работает, без лишних вопросов и хуйни. А твои сервера начинают тарахтеть быстрее и стабильнее.
Подробное резюме запрашивай в личке: @avs_jr_07
Чтобы все подряд ему не писали, ЗП хочет от 180к, за такой опыт, вполне справедливо!
🛠 #кандидаты #кадры
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Такие мероприятия я провожу редко, но хороших кадров грех не порекомендовать.
Резюмирую
Мужчина в полном рассвете сил (26 лет), хочет на удаленку. Есть большое желание развиваться дальше, делать вещи и пилить охуительные инфраструктурные циркули.
Не пиздит и не завышает опыт, а это уже ценно!
Шарит за:
- докеры, пайплайны, ансиблы, кубы, графики и т.п.
- спец по информационной безопасности (PT SIEM),
- автоматизация на bash, python
Короче базовый набор маст-хев практик из коробки.
Нанимаешь и он работает, без лишних вопросов и хуйни. А твои сервера начинают тарахтеть быстрее и стабильнее.
Подробное резюме запрашивай в личке: @avs_jr_07
Чтобы все подряд ему не писали, ЗП хочет от 180к, за такой опыт, вполне справедливо!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос с LF, думаю всем полезно будет.
ㅤ
Пишу пайплайн, есть такая конструкция:
Я бы хотел, чтобы параметр
Делаю так, но получается какая-то хуйня:
Короче смотри. Задачку можно решить несколькими способами.
Способ 1. Заточен под Bash:
Этот способ не сработает, если код запустится в
Способ 2. Универсальный:
На 100 % POSIX-совместим. По функционалу эти способы идентичны.
Ну и по итогу имеем:
Ну и твои варианты приветствуются, поделись в комментах, глядишь что-то маст-хевное у тебя в загашнике есть.
🛠 #bash #pipeline
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Пишу пайплайн, есть такая конструкция:
platform=$(uname -m)
docker run --platform linux/arm64
Я бы хотел, чтобы параметр
--platform linux/arm64 подставлял в том случае, если архитектура платформы == arm64, в других случаях этот параметр подставлять не нужно.Делаю так, но получается какая-то хуйня:
platform=$(uname -m)
docker run ${platform/arm64/--platform linux/arm64}
Короче смотри. Задачку можно решить несколькими способами.
Способ 1. Заточен под Bash:
platform=$(uname -m)
docker run $([[ $platform = arm64 ]] && echo "--platform linux/arm64")
Этот способ не сработает, если код запустится в
/bin/sh, потому что оно не POSIX. Тут уже смотри под чем все это будет запускаться.Тут можешь почитать чем отличаются [[ ]] от []
А тут что такое POSIX
Способ 2. Универсальный:
platform=$(uname -m)
docker run $( [ "$platform" = "arm64" ] && echo "--platform linux/arm64" )
На 100 % POSIX-совместим. По функционалу эти способы идентичны.
Ну и по итогу имеем:
[[ ... ]] — это расширенная bash-версия, безопаснее и гибче (поддержка pattern, безопасность кавычек при пробелах и пустых строках, поддежка логики с &&) [ ... ] — POSIX-совместимая, более строгая и требующая аккуратности с кавычками.Ну и твои варианты приветствуются, поделись в комментах, глядишь что-то маст-хевное у тебя в загашнике есть.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 48
Туалетная бумага по cron’у
ㅤ
Я короче каждый месяц заказываю на WB туалетную бумагу, сразу беру 32 рулона. В чатике ссылки как-то скидывал на этот товар.
И в сентябре меня эта рутина — заебала! Основная проблема — я забываю вовремя пополнять запасы. И после всех туалетных процедур приходится сидеть и ждать несколько часов пока мой бэкенд подсохнет и остатки артефактов сами отвалятся.
Открытой API у WB нет, но реверс-инженерию никто не отменял. Открываем в браузере режим разработчика, натыкиваем нужные действия на сайте и потом смотрим вкладку Network. Выбираем нужные запросы и рожаем скрипт.
Концепт скрипта:
1. Авторизация. С ней я не стал заморачиваться, авторизовался на сайте, выгрузил кукисы в файл. Полюбому можно и это автоматизировать через
2. Скрипт принимает единственный параметр
3. Дальше
Пример добавления в корзину:
Все параметры прилетают из
Говнокод конечно лютый получился, но работает. А это главное в нашем деле!
4. Ну и всё, в телегу мне приходит уведомление, что заказ оформлен, бабло спишут по факту. Ну и пишут примерное число доставки.
5. Как только товар пришел в пункт выдачи, получаю уведомление в телегу. Аналогично
6. Закидываем скрипт в крон и забываем про эту рутину.
Вот и вся наука. Теперь когда я возвращаюсь из гаража, захожу по пути в пункт выдачи и забираю свои 32 рулона. Удобно? Да охуенно!
Еще бы научить чтобы чайник сам в себя воду наливал, было бы вообще ништяк.
Давай, увидимся! Хороших тебе предстоящих выходных и береги себя!
🛠 #bash #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Я короче каждый месяц заказываю на WB туалетную бумагу, сразу беру 32 рулона. В чатике ссылки как-то скидывал на этот товар.
И в сентябре меня эта рутина — заебала! Основная проблема — я забываю вовремя пополнять запасы. И после всех туалетных процедур приходится сидеть и ждать несколько часов пока мой бэкенд подсохнет и остатки артефактов сами отвалятся.
Решено было накидать Bash скрипт, который каждый месяц будет заказывать на WB радость для моей жопы.
Открытой API у WB нет, но реверс-инженерию никто не отменял. Открываем в браузере режим разработчика, натыкиваем нужные действия на сайте и потом смотрим вкладку Network. Выбираем нужные запросы и рожаем скрипт.
Концепт скрипта:
1. Авторизация. С ней я не стал заморачиваться, авторизовался на сайте, выгрузил кукисы в файл. Полюбому можно и это автоматизировать через
curl, но чёт пока лень.2. Скрипт принимает единственный параметр
$1, это ссылка на товар WB, мало ли бумага моя закончится и придется другого поставщика искать.3. Дальше
curl подгружает кукисы из файла, и делает несколько запросов к сайту, добавляет бумагу в корзину и оформляет заказ.Пример добавления в корзину:
RESPONSE=$(curl -s "https://cart-storage-api.wildberries.ru/api/basket/sync?ts=$TS&device_id=$DEVICE_ID" \
-X POST \
-H 'content-type: application/json' \
-H 'origin: https://www.wildberries.ru' \
-b "$COOKIES_FILE" \
--data-raw "$JSON_PAYLOAD"
)
Все параметры прилетают из
$JSON_PAYLOAD, параметр автоматически заполняются нужными данными на основе переданного урла в $1, да, активно используется jq.Говнокод конечно лютый получился, но работает. А это главное в нашем деле!
4. Ну и всё, в телегу мне приходит уведомление, что заказ оформлен, бабло спишут по факту. Ну и пишут примерное число доставки.
5. Как только товар пришел в пункт выдачи, получаю уведомление в телегу. Аналогично
curl запросом проверяется статус в личном кабинете.6. Закидываем скрипт в крон и забываем про эту рутину.
59 23 25 * * /usr/local/sbin/shit_paper.sh https://wb.ru/296/detail.aspx
Вот и вся наука. Теперь когда я возвращаюсь из гаража, захожу по пути в пункт выдачи и забираю свои 32 рулона. Удобно? Да охуенно!
Думал мож еще курьера прикрутить, но сроки доставки могут увеличиться, да и этот бедолага начнет мне звонить, согласовывать все, тут бы AI прикрутить, да ну его. И так большое дело сделано, жопка рада.
Еще бы научить чтобы чайник сам в себя воду наливал, было бы вообще ништяк.
Давай, увидимся! Хороших тебе предстоящих выходных и береги себя!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
11 86
Продолжаем ковырять
ㅤ
Устанавливаем пакет:
В папке
Добавляем локейшен:
Теперь открываем в браузере и видим красивую мордочку. Демо мордочки можешь посмотреть здесь.
Да, не забываем включить Basic Auth чтобы хитрожопые не подглядывали.
Подробнее читай в официальной документации.
🛠 #angie #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
angie, на этот раз посмотрим на Status Page, которая отображает всю статистику по веб-серверу. Выглядит прям хорошо.ㅤ
Устанавливаем пакет:
sudo apt install angie-console-light
В папке
/usr/share/angie-console-light/html появляется статика.Добавляем локейшен:
location /console/ {
auto_redirect on;
alias /usr/share/angie-console-light/html/;
index index.html;
location /console/api/ {
api /status/;
}
}Теперь открываем в браузере и видим красивую мордочку. Демо мордочки можешь посмотреть здесь.
Да, не забываем включить Basic Auth чтобы хитрожопые не подглядывали.
У меня на паре пет проектов эта морда включена (графана избыточна), чисто посмотреть статусы раз в сутки, которые возвращают 500ку. Если оно горит красным, значит что-то где-то пошло по пизде.
Подробнее читай в официальной документации.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 33
Load Average на пальцах
Все про него знают, но не все понимают.
ㅤ
Давай рассмотрим такие цифры:
1. За последнюю 1 минуту средняя очередь = 0.30
2. за 5 минут = 1.20
3. за 15 минут = 0.80
Сразу куча вопросов, а что такое «очередь»?
«очередь» == количество задач, которые хотят работать прямо сейчас, но процессоров не хватает, чтобы заняться всеми сразу.
➡️ Главное правило
Сравниваем Load Average с количеством ядер.
- У тебя 4 ядра → нормальная нагрузка = до 4.0
- У тебя 1 ядро → нормальная нагрузка = до 1.0
- У тебя 8 ядер → нормальная нагрузка = до 8.0
➡️ Теперь на котиках
Ты стоишь в магазине:
- 1 касса, 1 человек в очереди → заебись
- 1 касса, 10 человек в очереди → жопа
- 4 кассы, 6 человек → пока норм
CPU = кассы, Load Average == очередь.
LA это не про загрузку CPU в процентах — это просто «очередь».
➡️ Как задебажить
Берем top, htop или подобное и смотрим столбец %CPU, если один процесс жрёт 100% на однопроцессорной системе — он пидарас и забил ядро. Если процесс жрёт 300% на 4-ядерной — он занял 3 ядра.
Смотрим самых прожорливых пидарасов:
Если ничего не нашел, то смотрим в сторону:
- I/O wait — медленный диск / много дисковых операций
- много процессов, но каждый почти ничего не ест (fork storm)
- сеть или блокировки
Капля в море, но это базовый чеклист на ситуацию, когда сервер ушел в «полку».
🛠 #linix #devops
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Все про него знают, но не все понимают.
ㅤ
Давай рассмотрим такие цифры:
0.30 1.20 0.80
1. За последнюю 1 минуту средняя очередь = 0.30
2. за 5 минут = 1.20
3. за 15 минут = 0.80
Сразу куча вопросов, а что такое «очередь»?
«очередь» == количество задач, которые хотят работать прямо сейчас, но процессоров не хватает, чтобы заняться всеми сразу.
Сравниваем Load Average с количеством ядер.
- У тебя 4 ядра → нормальная нагрузка = до 4.0
- У тебя 1 ядро → нормальная нагрузка = до 1.0
- У тебя 8 ядер → нормальная нагрузка = до 8.0
🟢 Всё в порядке:
- LA ≤ количество ядер → CPU успевает всё делать, очередей нет.
🟡 Чёт уже не то, подгрузилось:
- LA ≈ количество ядер × 1–2 → процессы начинают стоять в очереди, но система пока еще жива.
🔴 Жопа:
- LA сильно > количества ядер → процессы стоят в очереди, всё тормозит.
Ты стоишь в магазине:
- 1 касса, 1 человек в очереди → заебись
- 1 касса, 10 человек в очереди → жопа
- 4 кассы, 6 человек → пока норм
CPU = кассы, Load Average == очередь.
LA это не про загрузку CPU в процентах — это просто «очередь».
Берем top, htop или подобное и смотрим столбец %CPU, если один процесс жрёт 100% на однопроцессорной системе — он пидарас и забил ядро. Если процесс жрёт 300% на 4-ядерной — он занял 3 ядра.
Смотрим самых прожорливых пидарасов:
ps aux --sort=-%cpu | head
Если ничего не нашел, то смотрим в сторону:
- I/O wait — медленный диск / много дисковых операций
- много процессов, но каждый почти ничего не ест (fork storm)
- сеть или блокировки
Капля в море, но это базовый чеклист на ситуацию, когда сервер ушел в «полку».
А ты добавляй в комменты, что еще можно вынести в дебаг, будет полезно.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
2 79
Даже двухнедельный отпуск не принесёт столько удовольствия, как хорошая партнёрка от Selectel.
А если серьёзно — никакой магии. Советуй надёжного провайдера с 17-летним опытом, шестью ЦОДами и инфраструктурой под любые нужды — и получай до 15% на баланс.
В партнерской программе Selectel всё честно, прозрачно и самое главное — надежно! Проверял сам.
Год назад я ради интереса залетел в программу, и знаешь, зашло! Так что потыкай, за спрос не ударят в нос:
Зарегистрироваться: https://slc.tl/mtgzq
😇 🙂 🙃 😉 😌 😍 🥰 😘
😗 😙 😚 😋 😛 😝 😜 🤪
🤨 🧐 🤓 😎 🤩 🥳 😏 😒
😞 😔 😟 😕 🙁 ☹️ 😣 😖
😫 😩 🥺 😢 😭 😤 😠 😡
Серверы крутятся — проценты мутятся!
в ссылке моей рефки нет, так что не ссы — навариваться на тебе я не стану…
Реклама, АО «Селектел», erid: 2VtzqxCY6hn
Вредный совет: Если тебя спрашивают — где разместить инфраструктуру, предложи случайный и непроверенный хостинг из гугла, пусть страдают!
А если серьёзно — никакой магии. Советуй надёжного провайдера с 17-летним опытом, шестью ЦОДами и инфраструктурой под любые нужды — и получай до 15% на баланс.
На эти 15% арендуешь сервачок и бесплатно хостишь на нём свой личный блог про девопс-потуги и разработку. Ну или гоняешь пайплайны в личном гитлабе.
В партнерской программе Selectel всё честно, прозрачно и самое главное — надежно! Проверял сам.
Год назад я ради интереса залетел в программу, и знаешь, зашло! Так что потыкай, за спрос не ударят в нос:
Зарегистрироваться: https://slc.tl/mtgzq
Серверы крутятся — проценты мутятся!
в ссылке моей рефки нет, так что не ссы — навариваться на тебе я не стану…
Реклама, АО «Селектел», erid: 2VtzqxCY6hn
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем зрасти. Забирайте спеца на работу.
Codename: Андрей
Rank: Овер-преисполнившийся Linux-админ
Контакт: @egoza73
🛠 #кандидаты #кадры
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Codename: Андрей
Rank: Овер-преисполнившийся Linux-админ
⚪ Последнее время активно занимается мониторингом, особенно Zabbix, хотя может и в пром с графаной
⚪ Помогал мне тестировать и писать шаблоны для PVE/PBS и эта штука с небольшими видоизменениями с 6го заббикса стала официальной
⚪ Отлично разбирается в Linux, с закрытыми глазами разберет и соберет ядро с учетом нюансов железа и ПО
⚪ Кубер не уважает, к ансиблистам относится очень настороженно
⚪ Владеет светлой магией Bash, тёмной магией Perl, и немного Python
Контакт: @egoza73
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Разбираемся с options и inputs в gitlab
ㅤ
Частенько ребята с LF стали приходить с такой проблемой:
Это кусокговна пайплайна, который при запуске формирует выпадающий список окружений, выбираешь окружение и деплой проходит в него.
Ошибок синтаксиса в ямликах нет, каких-то разумных сообщений и наводок от гитлаба тоже нет. Чё делать?
➡️ Решение
Идем:
Всё! Теперь выпадающие списки вновь начинают работать.
А еще людей смущает новая штука
Оно будет пиздеть во внутреннем редакторе -
А зачем нам этот input ведь с options и так всё работает?
Ну хотя бы из-за типизированных параметров:
То есть:
- можно сделать чекбокс (boolean)
- можно сделать список (array)
- можно сделать ограничение по диапазону (number)
- можно сделать строгие варианты (options)
- можно сделать regex-валидацию
А обычный
GitLab постепенно превращает CI в настоящий «Pipeline as Functions».
Например, в проекте А:
И проекте B можно вызвать:
Это как вызов функции с аргументом.
Что еще:
- Inputs работают даже при trigger-пайплайнах
- Inputs могут быть required
- Inputs отображаются отдельно и аккуратно в UI
- Inputs часть нового стандарта GitLab CI Components
Короче одни плюсы. Но есть большое НООООО!
Это пиздец усложняет процесс разработки и отладку пайплайна.
Да, стало удобнее и гибче, но всё это превращается в безумное ООП, где без базы и документации к проекту — ты хуй разберешься.
Пока тебе хватает обычных
Изучай!
Как говорится — и не такие метели в ебало летели!
🛠 #devops #cicd #linuxfactory
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Частенько ребята с LF стали приходить с такой проблемой:
stages:
- deploy
variables:
ENVIRONMENT:
description: "Deployment environment"
value: "N/A"
options:
- "N/A"
- "STAGE"
- "PRODUCTION"
deploy:
stage: deploy
script:
- echo "Выбрано окружение:" "${ENVIRONMENT}"
rules:
- when: manual
Это кусок
НО — этот список перестал появляться. Причем избрано, у кого-то есть, у кого-то хуй с маслом.
Ошибок синтаксиса в ямликах нет, каких-то разумных сообщений и наводок от гитлаба тоже нет. Чё делать?
Идем:
Settings → CI/CD → Variables и кликаем в радио-батон — Developer.Всё! Теперь выпадающие списки вновь начинают работать.
А еще людей смущает новая штука
inputs, которая совсем недавно появилась. Работает она с 17й версии.spec:
inputs:
environment:
description: "Куда деплоим?"
type: string
default: "N/A"
options:
- "N/A"
- "STAGE"
- "PRODUCTION"
---
stages:
- deploy
deploy:
stage: deploy
rules:
- when: manual
script:
- echo "Выбрано окружение: $[[ inputs.environment ]]"
Оно будет пиздеть во внутреннем редакторе -
Incorrect type. Expected "string | array".yaml-schema, но будет работать если запустить пайплайн.Ошибка возникает, потому, что Pipeline Editor использует старый YAML-валидатор. Так что, не обращай внимание на этот пиздёж.
А зачем нам этот input ведь с options и так всё работает?
Ну хотя бы из-за типизированных параметров:
type: string | number | boolean | array
То есть:
- можно сделать чекбокс (boolean)
- можно сделать список (array)
- можно сделать ограничение по диапазону (number)
- можно сделать строгие варианты (options)
- можно сделать regex-валидацию
А обычный
variables такого не умеют.GitLab постепенно превращает CI в настоящий «Pipeline as Functions».
Например, в проекте А:
spec:
inputs:
env:
type: string
options: [stage, prod]
---
deploy-job:
script: deploy_to $[[ inputs.env ]]
И проекте B можно вызвать:
deploy:
trigger:
project: A
inputs:
env: prod
Это как вызов функции с аргументом.
Что еще:
- Inputs работают даже при trigger-пайплайнах
- Inputs могут быть required
- Inputs отображаются отдельно и аккуратно в UI
- Inputs часть нового стандарта GitLab CI Components
Короче одни плюсы. Но есть большое НООООО!
Это пиздец усложняет процесс разработки и отладку пайплайна.
Да, стало удобнее и гибче, но всё это превращается в безумное ООП, где без базы и документации к проекту — ты хуй разберешься.
Пока тебе хватает обычных
options используй их. Не лезь в это ООП, оно пока рано и избыточно, особенно если ты новичок.Изучай!
Как говорится — и не такие метели в ебало летели!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
7 39
Надоел и приелся VirtualBox/VMWare? Хочется новенького?
Да легко, опять же эта новая херабора как-то мимо многих прошла, включая меня. Нет это не LXC, vagrant и даже не docker.
Короче, это — Multipass от Canonical. И да, полностью бесплатная и с мордой.
ㅤ
Выдумать ничего не буду, лови нативку с сайта:
Работает под Linux, Wiundows, Mac
Что же это за зверь?
Multipass использует доступный гипервизор в зависимости от платформы:
- Linux — KVM
- macOS — HyperKit или QEMU
- Windows — Hyper-V или VirtualBox (в новых версиях QEMU)
Можно управлять как через морду, так и через командную строку. Это развязывает руки. Например, можно накодить себе bash скрипт и через него поднимать виртуалки под лабы.
Чё прикольно, для него есть Terraform провайдер, ну прям не инструмент, а золото.
Работает элементарно, если через морду — выбираешь дистрибутив, накручиваешь ползунки и жмешь Launch, через 40 секунд у тебя готовая виртуалка.
Ну либо headless (через командную):
Основные команды:
Из дистрибутивов только Ubuntu, но этого достаточно чтобы что-то протестировать либо погонять. Ребята в LF активно этим инструментом пользуются и создают тестовые кубер-кластера, ну и ансибл оттачивают.
Настроек там жопой ешь, так что можно и статические айпишники мутить, выбирать сетевые режимы и многое другое.
В общем рекомендую, инструмент зачетный, никакой ёбли как VBox и VMWare.
🛠 #devops #vm #linux
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
Да легко, опять же эта новая херабора как-то мимо многих прошла, включая меня. Нет это не LXC, vagrant и даже не docker.
Дело пахнет писюнами…
Короче, это — Multipass от Canonical. И да, полностью бесплатная и с мордой.
ㅤ
Выдумать ничего не буду, лови нативку с сайта:
Получитепо ебалумгновенную виртуальную машину Ubuntu с помощью одной команды. Multipass может запускать виртуальные машины и настраивать их с помощью cloud-init, как в общедоступном облаке. Прототип вашего облака запускается локально и бесплатно.
Работает под Linux, Wiundows, Mac
Что же это за зверь?
Multipass использует доступный гипервизор в зависимости от платформы:
- Linux — KVM
- macOS — HyperKit или QEMU
- Windows — Hyper-V или VirtualBox (в новых версиях QEMU)
Можно управлять как через морду, так и через командную строку. Это развязывает руки. Например, можно накодить себе bash скрипт и через него поднимать виртуалки под лабы.
Чё прикольно, для него есть Terraform провайдер, ну прям не инструмент, а золото.
terraform {
required_providers {
multipass = {
source = "larstobi/multipass"
version = "~> 1.4.2"
}
}
}Работает элементарно, если через морду — выбираешь дистрибутив, накручиваешь ползунки и жмешь Launch, через 40 секунд у тебя готовая виртуалка.
Ну либо headless (через командную):
Основные команды:
multipass launch --name foo
multipass exec foo -- lsb_release -a
multipass list
multipass stop foo bar
multipass start foo
multipass delete bar
multipass purge
multipass find
multipass launch -n bar --cloud-init cloud-config.yaml
multipass help
Из дистрибутивов только Ubuntu, но этого достаточно чтобы что-то протестировать либо погонять. Ребята в LF активно этим инструментом пользуются и создают тестовые кубер-кластера, ну и ансибл оттачивают.
Настроек там жопой ешь, так что можно и статические айпишники мутить, выбирать сетевые режимы и многое другое.
В общем рекомендую, инструмент зачетный, никакой ёбли как VBox и VMWare.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
5 51