bugsmoran

bugsmoran
Рейтинг
223
Регистрация
18.02.2010
jahost:
наверное, стоит каждую функцию вынести как опцию.

> Вообще я бы быстрее руками посмотрел, что мне надо.

грабить sitedossier и bing руками неудобно :)

А их и не надо грабить. Утилиты whois, telnet и dig способны вытащить помоему всю возможную информацию. И вообще одного telnet на все достаточно.

jahost:

> Изучайте массивы. Не хранят такое в файлах.

чем плохо использование файла?

Просто это другой культурный уровень. В данном случае малозначительно. Сейчас это по сути ничем не вредит. Но завтра напишите чуть более крупный скрипт по привычке через файл и сделаете нагрузку на диск и к тому же понизите надежность работы скрипта, потому что диск отваливается чаще памяти, да и очереди к нему выше, что задержит выполнение работы скрипта (а если там будет по крону, то еще и наложит друг на друга).

Короче привыкайте делать изначально качественно, даже если качество не требуется. Привычка - самое главное.

jahost:

спасибо за примеры, перепишу скрипт :)

Незачто. Я там дополнил немного.

jahost:
как в целом впечатление - хорошее дело делаю, или глупость затеял?

Не знаю :) Данные полчаете сомнительной ценности. Но может кому и пригодится. Вообще я бы быстрее руками посмотрел, что мне надо. На вкус и цвет...

# USAGE:
#bash hto.sh домен
# или:
#bash hto.sh ip.add.re.ss
# если сделать алиас (см.выше), то можно писать:
#этхтоваще домен
# или:
#этхтоваще ip.add.re.ss
# вместо "домен" написать нужный домен, и вместо "ip.add.re.ss" - нужный IP-адрес

Изучайте функцию getopts. Комментарии в коде не для пользователя существуют, а для программиста, который правит. Остальное через флаги выводится (или отсутствие флагов). Пользователю тяжело читать что-то в консоли. Как правило он не умеет.

if [ "$flag" = "1" ];
then echo "exit"; exit;
fi
#---> проверка введенных данных
if [ "$1" = "" ];
then echo "введи домен или ip! //опции: -v, -u, -h, -p, -y";
exit;
fi

Все тот же getopts. Вообще половину скрипта можно выкинуть и заменить на десяток строчек getopts. При этом скрипт будет более читабельным и очевидным. Потому что я с трудом смог понять, что в нем делается.

К тому же очень много копипаст по коду. Чтобы не было копипаст,нужно один раз написать функцию, а потом ее дергать.

#--- СБОР IP
echo "" > /tmp/ip1.txt && chmod 666 /tmp/ip1.txt
echo "-> получаю IP с NS...";
for i in `cat /tmp/ns.txt`;
do
#---> $1 - домен, $i - NS из того временного файла
ip=`host -t A $1 $i | grep -v "has\ no" | awk '{print $4}' | sed '/^ *$/d'`;
if [ "$ip" = "" ];
then echo "с $i нет нифига";
#---> пишем IP-ы во временный файл, сортируем его, ниже выводим список IP-ов
else echo $ip | sed 's/\ /\n/g' >> /tmp/ip1.txt
fi
done

Изучайте массивы. Не хранят такое в файлах.

if [ "$i" = "67.215.66.132" ]; then

Хардкод. Такие вещи выносятся в начало скрипта в отдельную переменную.

echo "A нет нифига, походу домен невалидный";
...
rez=`nc -vw 1 -z $1 $port 2>&1 | egrep -vi '(timed.out|refused|in.progress)'`; #ёбаный дебиан!

Вот такое неуважение к собственному коду (псевдокураж над собственным кодом) бывает исключительно в мире похапэшников. Вы не на PHP пишете, потому нет смысла выключать официоз.

=========

P.S.: пример как использовать функции и массивы. Примеры. что были под рукой, не адаптированные под Вашу задачу. но показательные.

Кусочек apache2ctl, который проверяет ИСП на предмет уродования конфига, прежде чем рестартануть его). Весь код пишется один раз:

restore_config() {
cp $APACHE2CONF'.backup' $APACHE2CONF
exit 0;
}

extended_apache_configtest() {

APACHE2CONF="/etc/apache2/apache2.conf"

if ! $HTTPD ${APACHE_ARGUMENTS} -t > /dev/null 2>&1; then
$HTTPD ${APACHE_ARGUMENTS} -t || true
restore_config
fi

if grep "^Listen" $APACHE2CONF /dev/null 2>&1; then
restore_config
fi

cp $APACHE2CONF $APACHE2CONF'.backup'

}

case $ARGV in
start)
mkdir -p ${APACHE_RUN_DIR:-/var/run/apache2}
install -d -o ${APACHE_RUN_USER:-www-data} ${APACHE_LOCK_DIR:-/var/lock/apache2}
# ssl_scache shouldn't be here if we're just starting up.
# (this is bad if there are several apache2 instances running)
rm -f ${APACHE_RUN_DIR:-/var/run/apache2}/*ssl_scache*
$HTTPD ${APACHE_ARGUMENTS} -k $ARGV
extended_apache_configtest
ERROR=$?
;;
stop|graceful-stop)
$HTTPD ${APACHE_ARGUMENTS} -k $ARGV
ERROR=$?
;;
restart|graceful)
extended_apache_configtest
if $HTTPD ${APACHE_ARGUMENTS} -t 2> /dev/null ; then
$HTTPD ${APACHE_ARGUMENTS} -k $ARGV
else
$HTTPD ${APACHE_ARGUMENTS} -t
fi
ERROR=$?
;;

Пример как использовать массивы:

       declare -a database_list
for DATABASE in `mysql -uroot -p$PASSWORD mysql -N --execute=\"show databases;\"`
do
database_list[db++]=$DATABASE;
done

ну и собрав массив вот так использовать:

for database_item in ${database_list[@]}; \
do mysqldump ... $database_item ... > ...
done

Пример использования getopts:

E_BADARGS=65

PrintHelpAndExit() {
echo
echo "Порядок использования:";echo
echo "$0 [-a] -s hostN -b backupN";echo
echo "Где hostN - имя хост-машины (Dom0), а backupN - имя бэкап-сервера"
echo "или вместо hostN, serverN/IP-address, в случае бэкапа одного пользователя"; echo
echo "Флаги:"
echo "-s -- Имя целевого сервера"
echo "-b -- Имя бэкап-сервера"
echo "-t -- Тестовый запуск при подключении нового сервера"
echo "-u -- User_ID удаляемого пользователя"
echo "-a -- Бэкап всех серверов включая служебные"
echo " (проигнорируется при использовании флага "-u")";
echo " (по умолчанию бэкапится только сервер,"
echo " на котором находятся пользовательские данные)";
echo "-h -- Просмотр этой справки"; echo
exit $E_BADARGS;
}


# Exemining options from command line
while getopts "s:b:u:aht" optionName; do
case "$optionName" in
a) ALL_SERVERS=YES;;
s) HOST=$OPTARG;;
b) BACKUP_SERVER=$OPTARG;;
u) USER_TO_DELETE=$OPTARG;;
t) DRY_RUN=YES;;
h) PrintHelpAndExit 0;;
\?) PrintHelpAndExit 0;;
*) PrintHelpAndExit $E_BADARGS;;
esac
done
globalmoney:

P.S. Своя панель всегда будет стабильнее, т.к. писать будут программисты и тестировать перед обновлениям на серверах, но вот затраты на это, будут не рентабильны, поэтому с Вами польностью согласен, что намного проще использовать уже готовое ПО.
P.P.S. Первый мой пост в этой теме, был всего лишь желанием указать на несоответствия в посте ТС и не более.

По Вашему мнению устойчивых хостингов вообще не бывает. Операционную систему они себе уже как минимум не сами писали.

Кстати, панель напрямую на устойчивость хостинга вообще никак не влияет. Апач был и до панели и как-то умел самостоятельно обслуживать HTTP-запросы. Вроде как ничего не изменилось. В цепочке браузер->реверс-прокси->вэб-сервер->СУБД панель не встречается.

globalmoney:
Как то не очень сочетается, понимаю, если бы речь шла о панели управления собственной разработки, но ни как не сторонней.

Зря на ТС наезжаете. ISPmanager конечно жутко бажная, но можно все вокруг нее допилить, вырубить апдейты и ничего она тогда поломать не может. Они вон с Января работают, наверняка уже допилили.

vandamme:
esetnod, кто вам сказал что убунту домашняя? что там что там есть серверные дистрибутивы

Это не говорит, что Убунту способна выполнять такие роли. Мало ли какие там амбиции у Шаттлворта. Убунту из дома лучше не вылазить.

lissyara:
а от капитализма - никто не считает чтоли?
посчитайте.
думаю, цифра потрясёт, если посчитать по честному - померших от голода и прочих.

Вы путаете умерших от капитализма с умершими от рук капиталистических стран. Последние умирают вне зависимости от того, какой строй в стране. Торговали оружием и нефтью равно как капиталисты, так и коммунисты. И убивали чужаков соразмерно своим возможностям вне зависимости от внутреннего экономического и социального строя. От рука капиталистов в Люксембурге умерло 0 человек, от рук капиталистов в США больше. Можно дело не в капитализме и не надо его примешивать к внешней политике?

Зато я Вам расскажу чего нет в капиталистических странах: там не стрелляют своих. Расстрелы питерских рабочих и голодомор были, 38-й год был. А вот расстрела каких-нибудь рабочих от штата Вайоминг или рабочих города Марсель не было никогда. И быть не могло.

И в развитых странах от голода умирают тольо алкоголики. Масштабы несравнимо ниже комунистических голоданий Поволжья. Развитая рыночная экономика вообще-то не склонна к поражению голодом. Именно капиталистические страны поставляют мегатонны продовольствия тоталитарным в Африке, а не наоборот.

Это солдаты СССР кушали амертканскую тушенку во Второй Мировой, а не американцы коммунистическую. Это в СССР были талоны, а не в Европе и США. Это в СССР нечего было жрать, а в 20-х годах 20-го века в США был кризис перепроизводства.

Мне в отличии от Вас довелось жить как в коммунистическом СССР. так и в двух развитых капиталистических государствах. И поверьте, голодных я видел только в СССР (собственно свою семью)

ipipe:

Так что в США коммунистов не жмут пока.

У них нет времени. Они жмут мексиканцев )))

Ну я так понимаю, что попытки устроить коммунизм мало у кого увенчались успехом. От фашизма погибло миллионов 80, а от коммунизма в разы больше. Так что если уж фашизм запрещен, то коммунизм и подавно.

То есть сам по себе коммунизм - строй может быть и хороший, но практика вот смущает... лучше сразу запретить.

brain-dead:
Может я туплю, но для меня не все очевидно. Поясните.

PID - номер процесса.

USER - пользователь, который его запустил (или из под которого его запустили)

DISK READ - скорость чтения с диска (абсолютные цифры нагрузки, которую дает на диск данный процесс)

DISK WRITE - скорость записи на диск (абсолютные цифры нагрузки, которую дает на диск данный процесс)

SWAPIN - вымещение данных на своп (Вам не надо)

IO - процент использования диска данным процессом от общего использования

COMMAND - программа, запущенная из под USER (который выше описан) и которая как раз этот диск и мучает.

Таким образом находите у кого самый высокий IO - он и виноват в мучениях диска.

Всего: 1963