Archive for June, 2008

Суммирование столбца текстового файла

Thursday, June 26th, 2008

Странное дело, посчитать сумму столбца в текстовом файле - тривиальная задача, и я был уверен что есть консольная утилита которая это делает. Но стал искать - не нашел, хотя всегда был уверен, что в Unix есть консольные утилиты на все случаи жизни. Может искал не так или не там, не знаю, тем не менее, сумму столбца посчитать было надо, набил вот эти несколько строчек, файл обозвал colsum:


#!/usr/bin/perl

while( <stdin> )
{
chomp;

$sum += $_;
}

print $sum . "\n";

Удобно применять в связке с awk. Для примера, посчитаем сколько RAM занял апач, т.е. суммируем столбец RSS:

ps uax|grep httpd| grep -v grep|awk ‘{print $6}’|colsum

Мониторинг значений UBC в OpenVZ

Wednesday, June 25th, 2008

Если вы не знаете что такое UBC (User Beancounters), то видимо это вам и не надо, но если интересно, читайте здесь: http://wiki.openvz.org/UBC. Ну а тем, кто знает, возможно пригодится скрипт для мониторинга UBC.

Алгоритм работы простой, парсим содержимое /proc/user_beancounters, смотрим значения failcnt, сравниваем с предыдущими, если значение увеличилось, выводим соответствующую строку.

Скрипт написан на perl и предназначен для работы в кроне главной ноды и мониторинга UBC всех работающих openvz-контейнеров. Подразумеваетя, что почту, которую шлет крон вы читаете. Если такой механизм уведомления не нравится, несложно прикрутить какой-нибудь другой. Так же нет препятствий для запуска скрипта внутри openvz-контейнера.

Собственно сам скрипт: check_ubc.pl

Закрываем паролем папку на веб-сервере

Sunday, June 15th, 2008

Иногда возникает потребность запаролить папку на веб-сервере, сама по себе задача тривиальная, но бывает к сайту есть только ftp-доступ, полный путь к папке неизвестен, да вообще-то и знать его не хочется, но есть желание сделать это как-нибудь по-быстрее.

Для этой цели сделан скрипт, его достаточно закинуть по ftp в нужную папку, предварительно установив требуемые значения переменных $user и $password, выполнить и удалить. Обязательное условие - наличие прав на запись в выбранную директорию.

<?

$user = 'user';
$password = 'mypass';

$dir = getcwd();

if( ! is_writeable( $dir ) )
{
print 'directory is not writeable.';
exit;
}

$hta = $dir . '/.htaccess';
$htp = $dir . '/.htpasswd';

$fh = @fopen( $htp, 'a' );

if( ! $fh )
{
print '.htpasswd open error.';
exit ;
}

fwrite( $fh, $user . ':' . crypt( $password ) . "\n" );

fclose( $fh );

$fh = @fopen( $hta, 'a' );

if( ! $fh )
{
print '.htaccess open error.';
exit;
}

$s = "AuthType Basic\n" .
"AuthName Private\n" .
"AuthUserFile $htp\n" .
"Require valid-user\n";

fwrite( $fh, $s );

fclose( $fh );
?>

Если запись в папку нежелательна, то вот такой скрипт сгенерит содержимое файлов:


<pre>
<?
$user = '1';
$password = '1';

$dir = getcwd();

$htp = $dir . '/.htpasswd';

print "-- .htpasswd\n";
print $user . ':' . crypt( $password ) . "\n\n";

$s = "AuthType Basic\n" .
"AuthName Private\n" .
"AuthUserFile $htp\n" .
"Require valid-user\n";

print "-- .htaccess\n";
print $s;
?>
</pre>

Редактирование виртуального хоста в Plesk

Saturday, June 7th, 2008

Конфиги виртуальных хостов Plesk генерирует сам и изменять не рекомендует. Но если необходимо внести какие-то свои изменения, возможность такая есть. Пусть для примера, конфиг для example.com находится здесь:

/var/www/vhosts/example.com/conf/httpd.include

Создаем рядом с ним vhost.conf:

/var/www/vhosts/example.com/conf/vhost.conf

В который добавляем требуемые нам директивы виртуального хоста. После чего выполняем:

/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=example.com

Проверяем конфигурацию апача, перезапускаем его.

apachectl configtest
apachectl restart

Аналогичным образом можно поступать с сабдоменами, например создаем:

/var/www/vhosts/example.com/subdomains/mysubdomain/conf/vhost.conf

Остальное все тоже самое.

Добавляем swap в Linux

Tuesday, June 3rd, 2008

Вообще-то сервак свопить не должен, иначе это уже не сервак, а хз что. Но бывает и не сервак, да и мало ли вдруг надо добавить свопа, всенепременно. Ну чтож добавим:

Создаем файл, в данном примере 2Gb:

# dd if=/dev/zero of=/swapfile bs=1024 count=2097152

Далее форматируем его:

# mkswap /swapfile

И добавляем:

# swapon /swapfile

После чего можем увидеть своп в списке /proc/swap. Обратная процедура также несложна:

# swapoff /swapfile