A shell script wants your job

Днес докато работех видях че една от машините лагна много жестоко. Влизам в нея гледам един cron наблъскал адски много зомби процеси (грубо около 50-60). Нямаше как да ги убия всички с killall затова се наложи да направя малко по грамотно решение на проблема – да драсна едно елементарно bash скриптче което да намери и убие процесите. 50-тина PID-а не се пишат лесно на ръка :D. Скрипта го надрасках за минута и е свръх елементарен но все пак заслужава внимание 🙂

В основата му седи конвейера

ps ax | grep -v grep | grep process_name | awk '{print $1}')

Тука получаваме лист с всички PID-ове на процеса който трябва да килнем като изключваме grep от този списък. Вече като имаме списъка нещата стават лесни всичко се завърта в един for. Ето го и крайния резултат

#!/bin/bash

PR=$(ps ax | grep -v grep | grep process_name | awk '{print $1}')

for PID in $PR
do
echo "$PID will be killed"
kill -9 $PID
done

Може да се „тунингова“ като името се взима като аргумент след името на скрипта и по този начин се вика като изпълнимо binary. Обаче не е много добра практика да има много такива чести случаи 😀 Но никога не пречи да сме предпазени от всякакви шитни

Enhanced by Zemanta

Image representing MySQL as depicted in CrunchBase

Преди известно време бях писал за MySQL Full Text Search 🙂 Днес имах много интересно преживяване с една заявка. В общи линии заявката търси за резултати който липсват друга таблица. Един основне Select и един sub select в WHERE частта на заявката. В общи линии скелета и е

SELECT DISTINCT (
`field`
)
FROM `table1`
WHERE `someID` =44
AND `firsTextField` NOT
IN (

SELECT DISTINCT (
`secondTextField`
)
FROM `table2`
WHERE `otherID` =44
)

В общи линии елементарна заявка. Написах я за 30 сек пускам я и зацикли машината. След дълго и търпеливо чакане от моя страна или по точно ~43 сек . Ми се изплю резултат lol . Пффф лудница. Влизам в машината гледам процесора е нормално натоварен почти в idle състояние. Шок и ужас. Пускам пак заявката пак същия резултат. Fuck WTF. Пускам explain на заявката и всичко лъсна – второто поле secondTextField е само full text search без index, а там табличката е скромна от около 35к реда. Кой да чете – full text search не е индекс. Вече е ясен проблема набързо едно

ALTER TABLE `links` ADD INDEX ( `linkUrlID` ) 

И нещата си дойдоха на местата Query took 0.0005 sec 😀

Внимавайте как си слагате индексите от тях ви зависи маргинално скоростта на заявката.

p.s Като цяло аз съм си крив за горната ситуация не само защото липсва индекс ами защото не ползва full text search метода 😀

Enhanced by Zemanta

Преди няколко дни забелязах че мясото в / (root дяла) ми е намаляло кардинално. Прегледах набързо за някакви големи свали файлове но не открих нищо. WTF ??? След това започнах да търся директория с неочаквано по голям размер от очаквания  – такава се оказа home директорията ми. След още по кратко разглеждане на нещата се оказа че ~.Skype/ е директорията която ми яде от HDD-а. Една бърза la -lah веднага показа че най големите файлове ми са от вида chatmsg1024.dbb chatmsg512.dbb и прочие. В дейтали това е историята на вашия skype chat. Общо взето решението е да изтриете само тези файлове така ще се занули историята ви ако подържате таква но все пак искате да запазите историята си за прехвърляните документи да речем. Това става лесно с командата

$ rm -rf chat*

Следната команда изтрива всички файлове започващи с chat. Винаги съществува варианта да се забрани history log-a но при мен това не е решение.

В действителност тези файлове са изключително интересни понеже от тях доста лесно може да се разчете цялата skype история – с кой сте говорили какви файлове сте прехвърляли и какво сте си писали. Но това е тема за някое бъдещо писане.

ps Тези наблюдения са направени върху skype 2.2.35

Enhanced by Zemanta

Днес исках да си инсталирам една игра 😀 но ми трябваха малко Windows библиотеки. Реших да ги попълня с winetricks и когато стартирах скрипта получих следното ведро съобщение –


$ ./winetricks
 ------------------------------------------------------
 wineserver not found!
 ------------------------------------------------------

Доста забавна ситуация и същевременно крайно очевидна. Winetricks не намира wineserver binary файлът.  Общо взето нормално понеже ползвам x64 Debian Linux и пакетите който ползвам не са от официалния източник. Решението е елементарно в 2 стъпки

1. Намираме пътя на wineserver


$ locate wineserver
/usr/lib32/wine-unstable/wineserver
/usr/share/man/de.UTF-8/man1/wineserver.1.gz
/usr/share/man/fr.UTF-8/man1/wineserver.1.gz
/usr/share/man/man1/wineserver.1.gz

И създаваме символична врзка към /usr/local/bin/wineserver където въпросния скрипт търси файлът по подразбиране но в моя случай е /usr/lib32/wine-unstable/wineserver


#ln -s /usr/lib32/wine-unstable/wineserver /usr/local/bin/wineserver

В последните няколко дни водим разговор с един приятел сис админ тип яйцето или кокошката – Debian vs Slackware. Както обикновено когато дебатираме с него няма победител аз си обичам моята религия той неговата, и двамата имаме достатъчно причини да го правим. Но покрай всичките бръщолевци ми отново се запитах защо. Защо използвам Debian на сървъри десктоп и декстоп машини ( дори си бях пуснал chroot на android-а ми). Тук се сещам и за твъдението на един мой бивш шеф:

Знаеш ли кой е най добрият Linux?

– Този който си успял да си инсталираш пръв.

В интерес на истината Slackware 9 мисля че беше първата ми дистрибуция която сам си инсталирах 😀 Но нещата се променят. Та ето някой от моите причини защо Debian:

1. Защото се поддържа лесно – зависимостите между пакетите. Дам това е отявления минус на slackware или плюс зависи как е погледнато. Зависимостите между пакетите е „екстра“ която улеснява кардинално инсталацията поддръжката и менаджирaнаето на една система. Когато искам да си инсталирам php не е необходимо да знам дали имам и останалите библиотеки необходими за да запали нормално. Спомням си един случай преди няколко години когато инсталирах на един web server и всички мъки докато попълня зависимостите да се компилират необходимите модули по php-то. Дам от друга страна получаваш двоичен пакет компилиран с някакви опции които може да не работят правилно за твоя случай или пък просто да липсва необходими опции. Еми за тия случай си има apt-get source дърпаш си сорска от който е билднат пакета плюс всички кръпки които са сложени. Модификации и модерации винаги са възможни по личен вкус и усмотрение.

2. Защото има netinstall cd – минимален image с основни пакети. Малко се чудя това колко би било полезно за нови потребители но за всеки системен администратор минималната инсталация си е преимущество. Инсталират се по малко пакети по малко сервизи. Изгражда се системата почти от 0. Така имаш сигурността че ще работи точно по начина по които очакваш – ни по малко ни повече. Преди няколко дни исках да сваля slackware cd1 за x64 система и бях неприятно изненадан че съществува само dvd вариант на х64 варианта им. Само за х86 има опция да се свали cd1 досататъчно за минимална инсталация. Не че е болка за умиране по време на инсталацията ще се изберат необходимите пакети но все пак цяло dvd за скелета на един сървър 😀 WTF??? Debian netinstall image ти предлага възможността пак за избор на какви допълнителни пакети да се издърпат от интернет като позитива е, че ще бъдат последната версия в огледалото stable/testing/unstable.

3. Защото има супер елементарен инсталатор – конзолата не е плашеща. Тук нещата са малко 50/50 защото и Slackware също е с изключително лесен инсталатор с единственото изключение което е ключово разделянето на диска се налага да се напишат малко команди в конзолата което е плашещо за някои потребители. fdisck или cfdisk не са толкова страшни но факта че не е вградено в инсталатора само по себе си е недостатък. Веднъж създаден дяла после се форматира от инсталатора но до тогава трябва да си почел малко. При Debian нещата са улеснени в това отношение по подразбиране инсталатора ти помага за това , но ако държиш да процеса да го контролираш по от близо винаги можеш да извикаш shell-а.

4. Защото debian екипа са отворени към странни идеи. Хммм някой слакър тука би ми се изсмял грубо, че такива изрудщини като кръстосан linux с BSD ядро не е необходим, но пък защо не. Хората преди са се смеели и на твърдението че, земята е кръгла. 😀 Ако не се лъжа Debian работи на  най- голяма колекция от хардуер 😉

5. По подразбиране не е с KDE – много мразим KDE. А както е всеизвестно Патрик е голям радетел на KDE и винаги това е била подразбиращата се графична среда в Slack-а. Още при първата ми среща с KDE разбрах че това не е моя тип GUI освен всичко друго много ми напомняше и за Windows

http://www.youtube.com/watch?v=10k3JwZUXlc