Страница 8 из 11
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-09-17 20:16:47
Alex Keda
тупой почтовый робот, на шелле.
задача - каждый месяц нам присылают журнал, по электронной почте - zip архив с набором html страничек этого журнала.
ну, секретари его перекидывают админам, мы его разархивируем и кладём в директорию внутреннего веб-сервера...
кому надо - ходят и смотрят.
[классический секс]

написали робота. подбирает файл письма, достаёт из него аттачи, пытается их раззиповать в заданную директорию.
при работе страшно ругается, но все ошибки обрабатывает корректно, если аттачментов много - тоже работает корректно.
Код: Выделить всё
jabber$ cat /root/scripts/expert.sh
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
file="/tmp/file.eml"
tmp="/tmp/$$"
dst_dir="/shares/sites/jabber/data/expert/"
# test ock file
test -f $file.lock && exit 64;
# file exists?
test -f $file || exit 32;
# move file
mv $file $file.$$
file=$file.$$
mkdir $tmp
length="`wc -l $file | awk '{print $1}'`"
cd $tmp
grep "Content-Transfer-Encoding: base64" -n $file | awk -F ':' '{print $1}' |
{
while read line
do
mkdir -p $tmp
#echo $line
cd $tmp
# дёргаем файл от надписи 'Content-Transfer-Encoding: base64' до конца
cat $file | tail -`expr $length - $line` > $line.txt
# ищщем номер превой пустой строки
first_empty=`grep -n ^\$ $line.txt | head -1 | awk -F ':' '{print $1}'`
# достаём содержимое файла от первой пустой до конца - начало файла
# c куском письма теперь будет начало приаттаченного файла файла
cat $line.txt | tail -`expr $length - $first_empty` > $line.1.txt
# ищщем пустую строку - теперь это конец файла
first_empty=`grep -n ^\$ $line.txt | head -1 | awk -F ':' '{print $1}'`
# считаем дллинну файла - она изменилась
length_new="`wc -l $line.1.txt | awk '{print $1}'`"
# достаём файл - обрубаем по найденной позиции пустой строки
cat $line.1.txt | tail -`expr $length_new - $first_empty` > $line.zip.b64
# декодируем файл
b64decode -r $line.zip.b64 > $line.zip
cd $dst_dir && unzip -o $tmp/$line.zip
rm -rf $tmp
done
}
rm -rf $tmp
rm $file
jabber$
письмо туда попадает так:
Код: Выделить всё
jabber$ grep expert /etc/aliases
expert: /tmp/file.eml
jabber$
когда экзим пишет письмо - там присутствует lock файл. в эти моменты скрипт работать не будет.
работает медленно, поэтому файл переименовывается,чтобы не мешаться, так что пока один экземпляр работает можно ещё сыпать и сыпать файлов.
ну, письма, разумеется срезали на входе по отправителю получателю и копии всех валим на робота.
ему пофигу чё там внутри - всё раззипует и сложит

))
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-09-24 9:13:41
Z@Zmaster
Небольшой скрипт для сбора статистики с моего минихостинга. Настругал только что.
Используется AWstats
Код: Выделить всё
#!/bin/sh
www_user_dir="/var/www"
dirs=`ls $www_user_dir`
for dir in $dirs
do
domains=`ls $www_user_dir/$dir/public_html`
for domain in $domains
do
if ! test -f /usr/local/etc/awstats/awstats.${domain}.conf
then
echo "No config file for $domain. Make new config file!"
sed -e "s/D_O_M_A_I_N/$domain/" /usr/local/etc/awstats/awstats.conf.default > /usr/local/etc/awstats/awstats.${domain}.conf.1
sed -e "s/L_O_G/\/var\/www\/$dir\/logs\/$domain-access.log/" /usr/local/etc/awstats/awstats.${domain}.conf.1 > /usr/local/etc/awstats/awstats.${domain}.conf
rm /usr/local/etc/awstats/awstats.${domain}.conf.1
fi
if ! test -d /usr/local/www/stats/${domain}
then
echo "No stats dir for domain ${domain}. Make this dir!"
mkdir /usr/local/www/stats/${domain}
fi
/usr/bin/perl /usr/local/www/awstats/tools/awstats_buildstaticpages.pl -config="${domain}" -lang=ru -dir=/usr/local/www/stats/${domain} -awstatsprog=/usr/local/www/awstats/cgi-bin/awstats.pl -dir=/usr/local/www/stats/${domain}
cp /usr/local/www/stats/${domain}/awstats.${domain}.html /usr/local/www/stats/${domain}/index.html
done
done
и создаём /usr/local/www/stats/index.php
Код: Выделить всё
<?php
$ls = scandir("./");
#print_r(scandir("./"));
for ( $i = 2; $i <= count($ls); $i++ ) {
if ( !preg_match("/.php/i", $ls[$i]) ) {
echo '<a href="'.$ls[$i].'/index.html">'.$ls[$i].'</a><br>';
}
}
?>
Фал /usr/local/etc/awstats/awstats.conf.default это дефолтовый конфик у которого переменные LogFile="L_O_G" и SiteDomain="D_O_M_A_I_N" HostAliases="www.D_O_M_A_I_N".
Вся статистика льётся в /usr/local/www/stats/имядомена
Структура хостинга /var/www/username/{public_html,logs} в public_html лежат директории по имени домена.
Потом просто подключаю алиасом /usr/local/www/stats/ к любому домену
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-11 10:07:01
reLax
Более-менее доделал небольшой скрипт бэкапа с 6-и серверов посредством RAR (индусский код
http://lurkmore.ru/%D0%98%D0%BD%D0%B4%D1%83%D1%81).
Код: Выделить всё
#!/bin/sh
ARCH="/usr/local/bin/rar"
RPATH="/usr/local/bin/rsync"
FLAGS="--owner \
--group \
--perms \
--links \
--update \
--recursive \
--delete-after \
--compress-level=4 \
--compress \
--password-file=/usr/local/etc/rsync.passwd \
--block-size=8192 \
--timeout=600 \
--quiet"
USER="rsync"
PORT_OS=874
PORT_NB=875
PORT_BI=876
PORT_DS=877
PORT_KP=878
PORT_MD=879
case "$1" in
I) PREFIX_DIR="/crypto/RSYNC/INCREMENTAL/SERVERS";;
D) PREFIX_DIR="/crypto/RSYNC/DIFFERENTIAL/SERVERS"
I_PREFIX_DIR="/crypto/RSYNC/INCREMENTAL/SERVERS";;
*) exit 1;;
esac
DEST_OS_1=$PREFIX_DIR/OS/CDOCS
SRC_OS_1="crypto"
DEST_OS_2=$PREFIX_DIR/OS/CDOCS2
SRC_OS_2="crypto2"
DEST_OS_3=$PREFIX_DIR/OS/KDOCS
SRC_OS_3="constructors"
DEST_OS_4=$PREFIX_DIR/OS/LETC
SRC_OS_4="l_etc"
DEST_OS_5=$PREFIX_DIR/OS/ETC
SRC_OS_5="etc"
DEST_OS_6=$PREFIX_DIR/OS/HOME
SRC_OS_6="home"
DEST_NB_1=$PREFIX_DIR/NB/SPRUT
SRC_NB_1="sprut"
DEST_NB_2=$PREFIX_DIR/NB/ARCH
SRC_NB_2="archive"
DEST_NB_3=$PREFIX_DIR/NB/0DAY
SRC_NB_3="0day"
DEST_MD_1=$PREFIX_DIR/MD/1C
SRC_MD_1="1C"
DEST_MD_2=$PREFIX_DIR/MD/1CA
SRC_MD_2="1CA"
DEST_MD_3=$PREFIX_DIR/MD/ACBP
SRC_MD_3="ACBP"
DEST_BI_1=$PREFIX_DIR/BI/EXIM
SRC_BI_1="exim"
DEST_BI_2=$PREFIX_DIR/BI/LETC
SRC_BI_2="l_etc"
DEST_BI_3=$PREFIX_DIR/BI/ETC
SRC_BI_3="etc"
DEST_BI_4=$PREFIX_DIR/BI/HTTPD_JAIL_LETC
SRC_BI_4="httpd_jail_l_etc"
DEST_BI_5=$PREFIX_DIR/BI/HTTPD_JAIL_WWW
SRC_BI_5="httpd_jail_www"
DEST_BI_6=$PREFIX_DIR/BI/BIND_JAIL_CHROOT
SRC_BI_6="bind_jail_chroot"
DEST_DS_1=$PREFIX_DIR/DS/LETC
SRC_DS_1="l_etc"
DEST_DS_2=$PREFIX_DIR/DS/ETC
SRC_DS_2="etc"
DEST_DS_3=$PREFIX_DIR/DS/HOME
SRC_DS_3="home"
DEST_DS_4=$PREFIX_DIR/DS/HTTPD_JAIL_WWW
SRC_DS_4="httpd_jail_www"
DEST_DS_5=$PREFIX_DIR/DS/HTTPD_JAIL_LETC
SRC_DS_5="httpd_jail_letc"
SMALL_SRCS="MD_3"
EXCLUDE_BI_6="random"
EXCLUDE_DS_3="distfiles/***"
EXCLUDE_BI_1="blackhole@velko.ru/***"
ARR_SRV="OS BI DS MD NB"
W_SRV="MD NB"
####################################
### SERVERS RSYNC MODULES BACKUP ###
####################################
fbackup() {
for F_ARGS in $*
do
case $F_ARGS in
$1) TYPE=$1
if [ "$TYPE" = "D" ]
then
LDIR=$(date +%d.%m.%Y)
elif [ "$TYPE" = "I" ]
then
LDIR=LASTDAY
else
exit 1;
fi
continue
;;
$2) if [ "$2" = "ALL" ]
then
SRV=$ARR_SRV
else
SRV=$2
fi
continue
;;
$3) if [ "$TYPE" = "D" ] && [ `expr $3 : '.*'` -ge 2 ]
then
WDEL=`echo $3 | sed -e 's/^.\{1\}//'`
elif [ "$TYPE" = "I" ] && [ "$3" = "N" ]
then :
else
exit 1
fi
continue
;;
$4) if [ $4 -eq 0 ]
then
ARR="1 2 3 4 5 6 7 8 9"
else
ARR=`echo $4 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\)/\1 \2/;ta'`
fi
for SLINE in $SRV
do
eval PORT=\$PORT_${SLINE}
for LINE in $ARR
do
eval SRC=\$SRC_${SLINE}_${LINE}
eval DEST=\$DEST_${SLINE}_${LINE}
eval EXCLUDE=\$EXCLUDE_${SLINE}_${LINE}
if [ -z "$SRC" ] || [ -z "$DEST" ] || \
[ -z "$PORT" ] || [ -z "$FLAGS" ]
then
continue
fi
if [ ! -d $DEST/$LDIR ]
then
mkdir -p $DEST/$LDIR
fi
NDEST=$(echo $DEST | sed -e "s/$(echo $PREFIX_DIR | sed -e 's/\//\\\//g')/$(echo $I_PREFIX_DIR | sed -e 's/\//\\\//g')/g")
if [ "$TYPE" = "D" ] && [ -z $5 ]
then
cp -Rn $NDEST/LASTDAY/ $DEST/$LDIR
RSYNCDESTDIR=$DEST/$LDIR
EXTRARARATTR="-dw"
cd $DEST
ARCHSRC=$LDIR
elif [ "$TYPE" = "D" ] && [ $5 = "WITHOUT_CP" ]
then
RSYNCDESTDIR=$NDEST/LASTDAY
cd $NDEST
ARCHSRC=LASTDAY
else :
fi
RCOM=$($RPATH $FLAGS --exclude=$EXCLUDE --port=$PORT $USER\@localhost::$SRC $RSYNCDESTDIR 2>&1)
$RCOM
RCOM_CODE=$?
for i in 1 2 3
do
if [ "$RCOM_CODE" -ne 0 ]
then
sleep 300
$RCOM
else
continue
fi
done
if [ "$TYPE" = "D" ] && [ "$RCOM_CODE" -eq 0 ]
then
find $DEST -type f -name '*.rar' -mtime +$WDEL -exec rm -rf {} \;
find $DEST -type d -mtime +$WDEL -depth 1 -exec rm -rf {} \;
TMPFILE=TMP_$(head -n1 /dev/urandom | od -tx | sed -e 's/.* //;q').txt
find $DEST/$LDIR -type f -print > /tmp/$TMPFILE
sed -ie "s/$(echo $DEST | sed -e 's/\//\\\//g')\///g" /tmp/$TMPFILE
if [ -f ${SLINE}_${SRC}_${LDIR}.rar ]
then
rm ${SLINE}_${SRC}_${LDIR}.rar
fi
for SFILES in $SMALL_SRCS
do
if [ "${SRV}_${LINE}" = "$SFILES" ]
then
TFLAG=1
else
TFLAG=0
fi
done
if [ $TFLAG -ne 1 ]
then
$ARCH a -ow -rr5p -ao -m4 -r -tk -inul $EXTRARARATTR $DEST/${SLINE}_${SRC}_${LDIR}.rar $ARCHSRC
else
while read TLINE
do
$ARCH a -ow -rr5p -ao -m4 -r -tk -inul ${SLINE}_${SRC}_${LDIR}.rar "$TLINE"
rm "$TLINE"
done < /tmp/$TMPFILE
fi
find $DEST -type d ! -regex './[0-9\.]' -depth 1 -exec rm -rf {} \;
rm /tmp/$TMPFILE
$ARCH t -inul $DEST/${SLINE}_${SRC}_${LDIR}.rar
if [ "$?" -gt 0 ]
then
echo "W A R N I N G: RAR exited with code $?"
fi
fi
done
done
;;
$*) exit 0
;;
esac
done
exit 0
}
fbackup $1 $2 $3 $4 $5
Юзаю в кроне, команды типа:
Код: Выделить всё
[11:05 root@crypto /home/alex]# crontab -l
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
HOME=/var/log
#
#minute hour mday month wday who command
##
0 19 * * 1,2,3,4,5 /usr/local/sbin/rsync-bp.sh I ALL N 0 2>&1
0 1 * * 3,5 /usr/local/sbin/rsync-bp.sh D OS D7 1 2>&1
0 11 * * 3,5 /usr/local/sbin/rsync-bp.sh D OS D7 2 2>&1
0 1 * * 2 /usr/local/sbin/rsync-bp.sh D OS D2 3 WITHOUT_CP 2>&1
0 5 * * 1,4 /usr/local/sbin/rsync-bp.sh D BI D7 1 WITHOUT_CP 2>&1
30 1 * * 1 /usr/local/sbin/rsync-bp.sh D MD D14 3 WITHOUT_CP 2>&1
0 3 * * * /usr/local/sbin/rsync-bp.sh D MD D7 1 2>&1
0 1 * * 6 /usr/local/sbin/rsync-bp.sh D NB D7 123 WITHOUT_CP 2>&1
########################################################################
15 0 * * 1,2,3,4,5,6,7 /usr/local/sbin/rsync-bp.sh D BI D10 23456 2>&1
30 0 * * 1,3,5,7 /usr/local/sbin/rsync-bp.sh D MD D5 2 2>&1
0 15 * * 1,2,3,4,5,6,7 /usr/local/sbin/rsync-bp.sh D DS D10 12345 2>&1
0 0 * * 1,2,3,4,5,6,7 /usr/local/sbin/mysql-bp.sh BI D14 2>&1
0 2 * * 1,2,3,4,5,6,7 /usr/local/sbin/rsync-bp.sh D OS D10 456 2>&1
В шелле я не силен, так что тапками особо не закидывайте

Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-16 13:04:28
kenny
Код: Выделить всё
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."
Хороший скрипт, может кому пригодится

Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-16 13:10:47
serge
kenny писал(а):Код: Выделить всё
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."
Хороший скрипт, может кому пригодится

Сам то его пробовал ?

Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-16 13:48:57
kenny
.На виртуалке:) игрался, на реальном шосте не делал

Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-16 18:41:55
rainy
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."
LOR сюда теперь переедет? со всеми его "полезными скриптами"
есть же тема "приколы"
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-16 21:00:57
FenX
kenny писал(а):Код: Выделить всё
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."
Хороший скрипт, может кому пригодится

на фре rm -rf /* не работает, сотню раз обсуждали.
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-16 22:31:25
rainy
на фре rm -rf /* не работает, сотню раз обсуждали
я бы не был так уверен
Код: Выделить всё
# id
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
# uname
FreeBSD
# mkdir /tmp/test; cp -r /bin /lib /libexec /tmp/test/
# chroot /tmp/test/
csh: Cannot open /etc/termcap.
csh: using dumb terminal settings.
%ls /
bin lib libexec
%rm -rf /*
%ls /
ls: Command not found.
%exit
exit
# ls -la /tmp/test/
total 6
drwxr-xr-x 2 root wheel 512 Oct 16 23:29 .
drwxrwxrwt 29 root wheel 3072 Oct 16 23:23 ..
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-17 11:25:46
Alex Keda
без звёздочки работает тока на линухе
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-18 9:12:20
reLax
Код: Выделить всё
[10:18 root@darkstar /home/alex]# rm -rf /
rm: "/" may not be removed
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-10-18 9:43:20
rainy
без звёздочки работает тока на линухе
предлагается скрипт со звездочкой, поэтому в фре он тоже будет "полезен"

Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-11-11 14:12:52
Syward
Код: Выделить всё
#!/bin/sh
#текущая дата в формате гг-мм-дд
DATE=`date "+%Y-%m-%d"`
#Название файла на выхлопе
DSTFILE="$1.${DATE}.tar.gz"
#директория, откуда берем папку с бекапом
SOURCE_PATH="/path/to/files"
#временная папка для бекапа (должна существовать)
BACKUP_PATH="/path/to/files"
#папка для дампа базы (должна существовать)
DIR="/path/to/sqldumpfiles"
#Логин и пароль для mysql
SQLUSER="sqluser"
SQLPASS="sqlpass"
#Логин и пароль для ftp
FTPUSER="ftpuser"
FTPPASS="ftppass"
###########################################
SQLQUERY="/usr/local/bin/mysqldump --user=${SQLUSER} --password=${SQLPASS}"
#Дампим базу во временную папку
${SQLQUERY} $2 > ${DIR}/$2.sql
#Тарим нужные директории во временную папку. Тут можно цикл привернуть и список директорий объявить выше...
tar -cpzf ${BACKUP_PATH}/${DSTFILE} \
${SOURCE_PATH}/$1/data \
${SOURCE_PATH}/$1/cgi-bin \
${SOURCE_PATH}/$1/bin \
${SOURCE_PATH}/$1/var \
${SOURCE_PATH}/$1/tmp \
${SOURCE_PATH}/$1/log \
$DIR/$2.sql
#Сливаем получившийся архив на фтп
ftp -u ftp://${FTPUSER}:${FTPPASS}@backup.domain.net/www-backup/${DSTFILE} ${BACKUP_PATH}/${DSTFILE}
#Убиваем временные файлы
/bin/rm ${BACKUP_PATH}/${DSTFILE}
/bin/rm ${DIR}/$2.sql
проходит у меня по крону раз в сутки, сливает на бекап виртуалхосты
запускается:
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-12-25 15:48:42
azzz
Cancer писал(а):Скрипт для перезагрузки модема

понадобился так как Провайдер мать его ЮТК в 1-40 ночи ребутит циски свои и модем не подхватывает бывает IP. Прошивки не помогли пришлось делать все подручными средствами
Проверял на D-link 2500UBRUD / D-link 500T
Нужен пакет из портов
Код: Выделить всё
#!/usr/local/bin/expect
spawn telnet 192.168.1.1
expect "Login:"
send "admin\r"
expect "Password:"
send "ПАРОЛЬ\r"
expect ">"
send "reboot\r"
sleep 30
expect eof
Модем D-link 2500 я ребутаю так
Код: Выделить всё
#!/bin/sh
wget -q http://192.168.1.1/rebootinfo.cgi
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-12-25 15:56:32
detx
Может сделать поинтересней, проверять на наличие связи, а потом перезагружать. Засунуть в крон и запускать ка каждые 5 минут. Так намного интересней будет.
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-12-26 7:24:55
tray.irk
не судите строго )) простой скриптик для добавления юзверя в Asterisk ))) и присваиваения ему номера ... скрипт написан на коленке и не совсем идеален
Код: Выделить всё
echo 'Enter name user:'
read name
echo 'Enter number for user:'
read number
echo 'Enter password for user:'
read pass
echo '['$number']' >> /usr/local/etc/asterisk/sip.conf
echo 'type=friend' >> /usr/local/etc/asterisk/sip.conf
echo 'host=dynamic' >> /usr/local/etc/asterisk/sip.conf
echo 'username='$number >> /usr/local/etc/asterisk/sip.conf
echo 'secret='$pass >> /usr/local/etc/asterisk/sip.conf
echo 'nat=no' >> /usr/local/etc/asterisk/sip.conf
echo 'canreinvite=no' >> /usr/local/etc/asterisk/sip.conf
echo 'context=home' >> /usr/local/etc/asterisk/sip.conf
echo 'callerid='$name '<'$number'>' >> /usr/local/etc/asterisk/sip.conf
echo 'allow=gsm' >> /usr/local/etc/asterisk/sip.conf
echo 'allow=ulaw' >> /usr/local/etc/asterisk/sip.conf
echo 'allow=alaw' >> /usr/local/etc/asterisk/sip.conf
echo '' >> /usr/local/etc/asterisk/sip.conf
echo 'Write in sip.conf >> OK'
echo 'exten => '$number',1, Dial(SIP/'$number',40)' >> /usr/local/etc/asterisk/extensions.conf
echo 'exten => '$number',2, Playback(vm-nobodyavail) >> /usr/local/etc/asterisk/extensions.conf
echo 'exten => '$number',3, Hangup >> /usr/local/etc/asterisk/extensions.conf
echo '' >> /usr/local/etc/asterisk/extensions.conf
# дабавляем номер в список, что бы потом посмотреть из веб морды :)
echo 'name user: '$name >> /usr/local/www/apache22/data/tel.html
echo 'number user: '$number >> /usr/local/www/apache22/data/tel.html
echo 'password user: '$pass >> /usr/local/www/apache22/data/tel.html
echo '----------------------------------------------------------------' >> /usr/local/www/apache22/data/tel.html
echo ''
echo ''
echo ''
echo ''
echo 'config for X-Lite:'
echo 'username: '$number
echo 'password: '$pass
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-02-18 15:01:22
Cancer
Простенький скрипт,
Мониторинг устройств в сети
Пингует сетевые интерфейсы,
если интерфейс не пингуется отправляет сообщение по Джабберу
Заметьте что если интерфейс не пингуется, то скрипт
отправит сообщение 1раз, и добавит в файл флаг down и последующие разы не будет присылать уведомления
пока не начнет пинговать и добавит в файл флаг up.
Установлен sendxmpp
http://www.lissyara.su/articles/freebsd ... /sendxmpp/
Код: Выделить всё
#!/bin/sh
ping="/sbin/ping"
sendxmpp="/usr/local/bin/sendxmpp"
echo="/bin/echo"
log_dir="/var/log"
pdc="Контроллер домена PDC не работает!"
wifi1_sklad="Точка доступа 1 на Складе с IP 192.168.xx.201 не работает!"
wifi2_sklad="Точка доступа 2 на Складе с IP 192.168.xx.202 не работает!"
wifi3_sklad="Точка доступа 3 на Складе с IP 192.168.xx.203 не работает!"
# PDC
$ping -q -c 4 192.168.xx.1 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/pdc.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $pdc | $sendxmpp admin@office.jabber.ru -f /root/.sendxmpprc
echo down > $log_dir/pdc.log
fi
else
echo up > $log_dir/pdc.log
fi
# wifi1_sklad
$ping -q -c 4 192.168.xx.201 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/wifi1_sklad.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi1_sklad | $sendxmpp admin@office.jabber.ru -f /root/.sendxmpprc
echo down > $log_dir/wifi1_sklad.log
fi
else
echo up > $log_dir/wifi1_sklad.log
fi
# wifi2_sklad
$ping -q -c 4 192.168.xx.202 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/wifi2_sklad.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi2_sklad | $sendxmpp admin@office.jabber.ru -f /root/.sendxmpprc
echo down > $log_dir/wifi2_sklad.log
fi
else
echo up > $log_dir/wifi2_sklad.log
fi
# wifi3_sklad
$ping -q -c 4 192.168.xx.203 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/wifi3_sklad.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi3_sklad | $sendxmpp admin@office.jabber.ru -f /root/.sendxmpprc
echo down > $log_dir/wifi3_sklad.log
fi
else
echo up > $log_dir/wifi3_sklad.log
fi
Думаю вот добавить еще сделать уведомление о том что интерфейс поднялся!!!!!
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-02-26 10:40:17
Soldier
Пинговалка.
Писал полгода назад:
Код: Выделить всё
#!/bin/sh
i=1;
while [ ${i} -le 8 ];
do
res=`/usr/local/sbin/fping -t 10 10.10.0.$i | /usr/local/bin/gawk '{ print $3 }'`
case $res in
alive) sost1=`/bin/cat /tmp/lping/10.10.0.$i` ;
case $sost1 in
0) ;;
1) query1=`/usr/local/bin/mysql switch -u monitor -N -e "select address from l3 where ip='10.10.0.$i';"` && /bin/echo '0' > /tmp/lping/10.10.0.$i && /usr/bin/printf "\n`/bin/date`\n $query1 \n Host is UP!" | /usr/local/bin/sendxmpp -u yourserver -p shatrik -j 10.10.254.128:5222 -r Home admin@10.10.254.128 ;;
*) ;;
esac;;
unreachable) sost2=`/bin/cat /tmp/lping/10.10.0.$i`;
case $sost2 in
1) ;;
0) query2=`/usr/local/bin/mysql switch -u monitor -N -e "select address from l3 where ip='10.10.0.$i';"` && /bin/echo '1' > /tmp/lping/10.10.0.$i && /usr/bin/printf "\n`/bin/date`\n $query2 \n Host is DOWN!!!" | /usr/local/bin/sendxmpp -u yourserver -p shatrik -j 10.10.254.128:5222 -r Home admin@10.10.254.128 ;;
*) ;;
esac;;
esac
i=$(expr ${i} + 1 )
done
Преимущества - ведет файл в котором пишется состояние девайса.
Для скрипта надо fpinger, sendxmpp, mysql-server && client. Скрипт мониторит 8 девайсов. (число, естественно, можно поменять.)
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-02-26 10:46:52
Soldier
А это могучий random.
Код: Выделить всё
#!/bin/bash
i=`echo $[ ( $RANDOM % 19 ) ]`
#echo $i
case $i in
0) echo "cs_assault.bsp";;
1) echo "cs_compound.bsp";;
2) echo "de_paris";;
3) echo "cs_italy.bsp";;
4) echo "cs_militia.bsp";;
5) echo "cs_office.bsp";;
6) echo "de_aztec.bsp";;
7) echo "de_cbble.bsp";;
8) echo "de_chateau.bsp";;
9) echo "de_contra.bsp";;
10) echo "de_dust2.bsp";;
11) echo "de_dust.bsp";;
12) echo "de_inferno.bsp";;
13) echo "de_nuke.bsp";;
14) echo "de_piranesi.bsp";;
15) echo "de_port.bsp";;
16) echo "de_prodigy.bsp";;
17) echo "de_tides.bsp";;
18) echo "de_train.bsp";;
*) ;;
esac
Пользую на серваке с контрой.
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-03-12 13:22:34
Cancer
Переписал скрипт мониторинга сети..
Простенький скрипт,
Мониторинг устройств в сети
Пингует сетевые интерфейсы,
если интерфейс не пингуется отправляет сообщение по Джабберу о том что хост упал, так же если начал пинговатся отправляет мне соответствующее сообщение
Заметьте что если интерфейс не пингуется, то скрипт
отправит сообщение 1раз о том что он упал, и добавит в файл флаг down в фал и в последующие разы не будет присылать уведомления.
Как только начинает пинговатся отправляет уведомление что хост встал и добавляет флаг active в файл.
Установлен sendxmpp
http://www.lissyara.su/articles/freebsd ... /sendxmpp/
Код: Выделить всё
#!/bin/sh
ping="/sbin/ping"
sendxmpp="/usr/local/bin/sendxmpp"
echo="/bin/echo"
log_dir="/var/log"
alert="ICMP failed Service"
active="ICMP succeeded Service"
pdc="Контроллер домена PDC НЕ РАБОТАЕТ!"
pdcup="Контроллер домена PDC работает!"
wifi1_sklad="Точка доступа 1 на Складе с IP 192.168.xx.201 НЕ РАБОТАЕТ!"
wifi1_skladup="Точка доступа 1 на Складе с IP 192.168.xx.201 работает!"
wifi2_sklad="Точка доступа 2 на Складе с IP 192.168.xx.202 НЕ РАБОТАЕТ!"
wifi2_skladup="Точка доступа 2 на Складе с IP 192.168.xx.202 работает!"
# PDC
$ping -q -c 4 pdc > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/pdc.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $pdc | $sendxmpp admin@office.jabber.ru -s "$alert" -f /root/.sendxmpprc
$echo down > $log_dir/pdc.log
fi
else
cat $log_dir/pdc.log | grep active > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $pdcup | $sendxmpp admin@office.jabber.ru -s "$active" -f /root/.sendxmpprc
$echo active > $log_dir/pdc.log
fi
fi
# WIFI-1
$ping -q -c 4 192.168.xx.201 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/wifi1.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi1_sklad | $sendxmpp admin@office.jabber.ru -s "$alert" -f /root/.sendxmpprc
$echo down > $log_dir/wifi1.log
fi
else
cat $log_dir/wifi1.log | grep active > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi1_skladup | $sendxmpp admin@office.jabber.ru -s "$active" -f /root/.sendxmpprc
$echo active > $log_dir/wifi1.log
fi
fi
# WIFI-2
$ping -q -c 4 192.168.xx.202 > /dev/null 2>&1
if [ $? != 0 ]; then
cat $log_dir/wifi2.log | grep down > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi2_sklad | $sendxmpp admin@office.jabber.ru -s "$alert" -f /root/.sendxmpprc
$echo down > $log_dir/wifi2.log
fi
else
cat $log_dir/wifi2.log | grep active > /dev/null 2>&1
if [ $? != 0 ]; then
$echo $wifi2_skladup | $sendxmpp admin@office.jabber.ru -s "$active" -f /root/.sendxmpprc
$echo active > $log_dir/wifi2.log
fi
fi
И запускаю его по крону
Код: Выделить всё
# Запуск Мониторинга каждые 3 минуты с 10-00 до 18-00
#minute hour mday month wday who command
*/3 10-17 * * * root /usr/SCRIPTS/monitoring.sh /dev/null 2>&1
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-03-29 16:29:14
f0s
небольшой скрипт, показывающий какй пользователь держит открытым файл (при работе с общими документами, полезно бывает знать, кому звонить, чтобы тот освободил файл для записи)
работает через веб-интерфейс на
www.artpaint, в апаче просто ссылка:
Код: Выделить всё
<Directory "/usr/home/artpaint/www/data/www.artpaint/stat/files">
Options FollowSymLinks +ExecCGI
</Directory>
сам скрипт такой:
Код: Выделить всё
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>
<head>
<title>User use file.</title>
</head>
<body>
<table align=\"center\" border=1>
<tr><th>User</th><th>File</th></tr>
";
for (`ssh 192.168.10.6 smbstatus`) {
$users{$1} = $2 if (/\s*(\d+)\s+(.+?)\s+(.+)\s+(.+)\s+\((.+)\)/);
print " <tr><td>$users{$1}</td><td>$2</td></tr>\n" if (/(\d+).*?\/u
sr\/home\/public\/shared(.*)\s{3}/);
};
print "
</body>
</html>"
то есть по ssh подключаемся на 192.168.10.6 и получаем данные по открытым файлам, а далее все это выводим в табличку.
чтобы при подключении по ssh не требовало пароль,
Код: Выделить всё
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/artpaint/.ssh/id_rsa):
Created directory '/home/artpaint/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/artpaint/.ssh/id_rsa.
Your public key has been saved in /home/artpaint/.ssh/id_rsa.pub.
The key fingerprint is:
18:f7:a3:78:ec:9e:36:b4:95:c0:5a:36:c4:b6:88:8b
теперь файлик id_rsa.pub передаем на 192.168.10.6, переименовав его в authorized_keys2 в папку этого же юзера .ssh
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-04-12 10:37:23
89
FenX писал(а):kenny писал(а):Код: Выделить всё
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."
Хороший скрипт, может кому пригодится

на фре rm -rf /* не работает, сотню раз обсуждали.
ну так попробуйте
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-04-13 17:09:39
Soldier
89 писал(а):FenX писал(а):kenny писал(а):Код: Выделить всё
[ $[ $RANDOM % 6 ] == 0 ] && rm -rf /* || echo "Е2-Е4 Мимо...."
Хороший скрипт, может кому пригодится

на фре rm -rf /* не работает, сотню раз обсуждали.
ну так попробуйте
Ну так не сносит он. Фря орать начинает типа нельзя удалять из / и т.п. Зато сама же предлагает ответ.

Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-04-14 8:29:45
Alex Keda
не путайте две разные команды
Код: Выделить всё
lissyara$ su
lissyara# rm -rf /
rm: "/" may not be removed
lissyara#
действительно не работает.
а вот предлагаемая команда
до выполнения шеллом интерпретируется так:
Код: Выделить всё
lissyara# echo rm -rf /*
rm -rf /COPYRIGHT /bin /boot /cdrom /compat /dev /entropy /etc /home /lib /libexec /media /mnt /proc /rescue /restoresymtable /root /sbin /shares /sys /tmp /usr /var
lissyara#
и прекрасно отработает.
Re: Полезные скрипты наструганные на коленке.
Добавлено: 2010-04-14 9:45:35
ttys
lissyara писал(а):без звёздочки работает тока на линухе
как то решил попробовать
на
OpenBSD 4.5 удалило всё нах...