Когда на виртуальной машине все плохо и надо проверить её на проблемы с I/O
https://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/
https://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/
Medium
Troubleshooting High I/O Wait in Linux
A journey into finding processes generating high I/O wait.
Если нужно сделать из бинарника сервис, а виндовая утилита
https://nssm.cc
sc бессильна, то на помощь вам придет NSSM - the Non-Sucking Service Managerhttps://nssm.cc
Загрузка файла на JFrog Artifactory (с датой модификации в 0 дней) с передачей хеш-сумм и интерактивным запросом токена:
read -sp 'Please, enter your token: ' TOKEN
FILE=$(find /path/to/file -mtime 0 -name "*.tar.gz")
echo -e "\nFile - $FILE"
echo "Hash sum computing..."
FILE_MD5=$(md5sum $FILE | awk '{print $1}')
echo "MD5 is done"
FILE_SHA1=$(sha1sum $FILE | awk '{print $1}')
echo "SHA1 is done"
FILE_SHA256=$(sha256sum $FILE | awk '{print $1}')
echo "SHA256 is done"
echo "Uploading..."
curl -# -k -H "X-Checksum-MD5:$FILE_MD5" -H "X-Checksum-Sha1:$FILE_SHA1" -H "X-Checksum-Sha256:$FILE_SHA256" -H "X-JFrog-Art-Api:$TOKEN" -T $FILE "https://url" | tee /dev/null
В телегу завезли поиск собеседников и чатов рядом с вами
https://telegram.org/blog/contacts-local-groups
https://telegram.org/blog/contacts-local-groups
Telegram
Location-Based Chats, Adding Contacts Without Phone Numbers and More
Today we're making it easier to exchange contact info on Telegram and introducing a way to host location-based public communities.
Составление словаря с с логином и паролем в base64 (изначально в виде
user:password)# Отдаешь файл с паролями и вставляешь в самом начале строки user
sed -i 's/^/user:/' darkweb2017-top1000.txt
# Кодируешь каждую строку в base64 и записываешь все в файл
awk '{system("echo "$1"|base64")}' darkweb2017-top1000.txt > base64.txt
# Декодируешь построчно из файла (для проверки)
awk '{system("echo "$1"|base64 -d")}' base64.txtЕдем на горящем поезде в светлое будущее. Не забудьте пристегнуть ремни и надеть защитные очки 😎
https://habr.com/ru/company/veeam/blog/457874/
https://habr.com/ru/company/veeam/blog/457874/
Хабр
Почему сотрудники возвращаются? Истории уходивших и вернувшихся
Если достаточно долго проработать в одной компании — например, восемь лет (как я, хаха) — неизбежно возникнет желание сходить посмотреть, что же находится по ту сторону привычных стен. Бывает,...
Запуск джобы на нескольких gitlab-runner без дублирования кода и костылей:
С дублированием кода это бы выглядело вот так:
Если попробовать указать через
что на раннере должен висеть и тег
Если к
то это тоже не сработает правильно, потому что опять та же логика
Gitlab будет выбирать свободный раннер и запускать на нем джобу.
Первоначальный вариант формирует шаблон, а затем уже подставляется в джобу с указанием тега
.test_template: &build
stage: deploy
noscript:
- ls -al
allow_failure: false
build_one:
<<: *build
tags:
- serv1
build_two:
<<: *build
tags:
- serv2
С дублированием кода это бы выглядело вот так:
build_one:
stage: deploy
noscript:
- ls -al
tags:
- serv1
allow_failure: false
build_two:
stage: deploy
noscript:
- ls -al
tags:
- serv2
allow_failure: false
Если попробовать указать через
tags 2 раннера serv1 и serv2, то задача повиснет в статусе pending, потому что логика Gitlab предполагает,что на раннере должен висеть и тег
serv1 и serv2.Если к
serv1 и serv2 добавить дополнительный тег serv,то это тоже не сработает правильно, потому что опять та же логика
Gitlab будет выбирать свободный раннер и запускать на нем джобу.
Первоначальный вариант формирует шаблон, а затем уже подставляется в джобу с указанием тега