Re: Полезные скрипты наструганные на коленке.
Добавлено: 2009-02-14 4:22:05
не обязательно крон, запускай его привычным способом.
Сталина давно нэт. Чтоби спасти Россию, ищитэ его внутри сэбя...
https://hp.lissyara.su/
Код: Выделить всё
#!/bin/sh
ip="213.180.204.8"
d=`date`;
echo "start $d" >> /var/log/reconnect_log;
pingresult=`/sbin/ping -c 1 $ip|grep icmp_seq`;
echo "ping $pingresult" >> /var/log/reconnect_log;
if ["$pingresult" = ""];
then
echo "reconnect $d" >> /var/log/reconnect_log;
killall ppp;
sleep 40;
/usr/sbin/ppp -ddial inet >> /var/log/reconnect_log;
echo "end reconnect" >> /var/log/reconnect_log;
sleep 40;
fi
Код: Выделить всё
[...]
PORT_5=873
PORT_6=874
[..]
for F_ARGS in $*; do
case $F_ARGS in
[...]
$5) ARR=`echo $5 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\)/\1 \2/;ta'`
for SLINE in $ARR
do
eval PORT=\$PORT_${SLINE}
[...]
done
reLax писал(а):в 9 штук ну никак не помещалось.
Код: Выделить всё
zg# cat 1.sh
#!/bin/sh
while [ $# -ge 1 ]; do
echo $1
shift
done
Код: Выделить всё
zg# ./1.sh 1 2 3 4 5 6 7 8 9 10 11 12 13
1
2
3
4
5
6
7
8
9
10
11
12
13
zg#
reLax писал(а):~./script.sh D OS U 4 123456789
А так ?
Код: Выделить всё
zg# ./1.sh D OS U 4 123456789
D
OS
U
4
123456789
zg#
просто первые девять аргументы доступны через $1 ... $9, но это не ограничение как таковоеreLax писал(а):Я читал просто когда-то, что в sh то больше 9-и аргументов не может быть в командной строке.
пример покажи, просто так не совсем понятно -)reLax писал(а):Если назначать одинаковые аргументы в ком-строке, то они шеллом воспринимаются как предыдущий аргумент )))
Тестовый скрипт:zg писал(а):reLax писал(а):~./script.sh D OS U 4 123456789
А так ?Код: Выделить всё
zg# ./1.sh D OS U 4 123456789 D OS U 4 123456789 zg#
просто первые девять аргументы доступны через $1 ... $9, но это не ограничение как таковоеreLax писал(а):Я читал просто когда-то, что в sh то больше 9-и аргументов не может быть в командной строке.
пример покажи, просто так не совсем понятно -)reLax писал(а):Если назначать одинаковые аргументы в ком-строке, то они шеллом воспринимаются как предыдущий аргумент )))
Код: Выделить всё
#!/bin/sh -vx
RPATH="/usr/local/bin/rsync"
U_FLAGS="--owner \
--group \
--perms \
--xattrs \
--links \
--update \
--recursive \
--delete-after \
--compress-level=4 \
--compress \
--password-file=/usr/local/etc/rsync.passwd
--verbose"
W_FLAGS="--owner \
--group \
--perms \
--links \
--update \
--recursive \
--delete-after \
--compress-level=4 \
--compress \
--password-file=/usr/local/etc/rsync.passwd
--verbose"
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";;
*) exit 1;;
esac
DEST_OS_1=$PREFIX_DIR/OS/CDOCS
SRC_OS_1="crypto"
DEST_OS_2=$PREFIX_DIR/OS/KDOCS
SRC_OS_2="constructors"
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"
ARR_SRV="OS BI DS MD NB"
W_SRV="MD NB"
####################################
### SERVERS RSYNC MODULES BACKUP ###
####################################
fbackup() {
# USAGE:
# First ARG = Type of backup
# Second ARG = Server name. May be ALL
# Third ARG = How much days to leave files
# Fourth ARG = Rsync modules digits number (equal 1234 etc)
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 0; fi
continue
;;
$2) if [ "$2" = "ALL" ]
then SRV=$ARR_SRV
else SRV=$2
fi
continue
;;
$3) SYS=$3
continue
;;
$4) if [ "$TYPE" = "D" ] && [ $4 -ge 1 ]
then WDEL=$4
elif [ "$TYPE" = "I" ] && [ "$4" = "N" ]
then
:
else exit 0
fi
continue
;;
$5) ARR=`echo $5 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\)/\1 \2/;ta'`
for SLINE in $SRV
do
eval PORT=\$PORT_${SLINE}
for OSLINE in $W_SRV
do
if [ "$OSLINE" = "$SLINE" ]
then SYS="W"; fi
done
eval FLAGS=\$${SYS}_FLAGS
for LINE in $ARR
do
eval SRC=\$SRC_${SLINE}_${LINE}
eval DEST=\$DEST_${SLINE}_${LINE}
if [ -z "$SRC" ] || \
[ -z "$DEST" ] || \
[ -z "$PORT" ] || \
[ -z "$FLAGS" ]
then
continue
fi
if [ ! -d $DEST/$LDIR ]
then mkdir -p $DEST/$LDIR;fi
$RPATH $FLAGS --port=$PORT $USER\@localhost::$SRC $DEST/$LDIR
if [ "$TYPE" = "D" ]
then
find $DEST -type f -name '*.tar.gz' -mtime +$WDEL -exec rm -rf {} \;
find $DEST -type d -mtime +$WDEL -depth 1 -exec rm -rf {} \;
find $DEST/$LDIR -print > /tmp/tmplist
cd $DEST
if tar zcf /$LDIR.tar.gz $LDIR/* --from-file /tmp/tmplist
then rm -rf $LDIR
fi
fi
done
done
;;
$*) exit 0
;;
esac
done
}
#######################################
### DOING TAR OF BACKUPS ###
#######################################
tar() {
case "$*" in
$1) echo $1
if [ ! -d $PREFIX_DIR/$1 ]
then exit 0; fi
cd $PREFIX_DIR/$1
if tar zcf $LDIR.tar.gz $LDIR/*
then find $1 -type d -depth 1 -exec rm -rf {} \;;fi
;;
*) exit 0
;;
esac
}
fbackup $1 $2 $3 $4 $5
Код: Выделить всё
[10:53 root@crypto /home/alex]# ./rsync4.sh D OS U 1 1
#!/bin/sh -vx
RPATH="/usr/local/bin/rsync"
+ RPATH=/usr/local/bin/rsync
U_FLAGS="--owner \
--group \
--perms \
--xattrs \
--links \
--update \
--recursive \
--delete-after \
--compress-level=4 \
--compress \
--password-file=/usr/local/etc/rsync.passwd
--verbose"
+ U_FLAGS=--owner --group --perms --xattrs --links --update --recursive --delete-after --compress-level=4 --compress --password-file=/usr/local/etc/rsync.passwd
--verbose
W_FLAGS="--owner \
--group \
--perms \
--links \
--update \
--recursive \
--delete-after \
--compress-level=4 \
--compress \
--password-file=/usr/local/etc/rsync.passwd
--verbose"
+ W_FLAGS=--owner --group --perms --links --update --recursive --delete-after --compress-level=4 --compress --password-file=/usr/local/etc/rsync.passwd
--verbose
USER="rsync"
+ USER=rsync
PORT_OS=874
+ PORT_OS=874
PORT_NB=875
+ PORT_NB=875
PORT_BI=876
+ PORT_BI=876
PORT_DS=877
+ PORT_DS=877
PORT_KP=878
+ PORT_KP=878
PORT_MD=879
+ PORT_MD=879
case "$1" in
I) PREFIX_DIR="/crypto/RSYNC/INCREMENTAL/SERVERS";;
D) PREFIX_DIR="/crypto/RSYNC/DIFFERENTIAL/SERVERS";;
*) exit 1;;
esac
+ PREFIX_DIR=/crypto/RSYNC/DIFFERENTIAL/SERVERS
DEST_OS_1=$PREFIX_DIR/OS/CDOCS
+ DEST_OS_1=/crypto/RSYNC/DIFFERENTIAL/SERVERS/OS/CDOCS
SRC_OS_1="crypto"
+ SRC_OS_1=crypto
DEST_OS_2=$PREFIX_DIR/OS/KDOCS
+ DEST_OS_2=/crypto/RSYNC/DIFFERENTIAL/SERVERS/OS/KDOCS
SRC_OS_2="constructors"
+ SRC_OS_2=constructors
DEST_NB_1=$PREFIX_DIR/NB/SPRUT
+ DEST_NB_1=/crypto/RSYNC/DIFFERENTIAL/SERVERS/NB/SPRUT
SRC_NB_1="sprut"
+ SRC_NB_1=sprut
DEST_NB_2=$PREFIX_DIR/NB/ARCH
+ DEST_NB_2=/crypto/RSYNC/DIFFERENTIAL/SERVERS/NB/ARCH
SRC_NB_2="archive"
+ SRC_NB_2=archive
DEST_NB_3=$PREFIX_DIR/NB/0DAY
+ DEST_NB_3=/crypto/RSYNC/DIFFERENTIAL/SERVERS/NB/0DAY
SRC_NB_3="0day"
+ SRC_NB_3=0day
DEST_MD_1=$PREFIX_DIR/MD/1C
+ DEST_MD_1=/crypto/RSYNC/DIFFERENTIAL/SERVERS/MD/1C
SRC_MD_1="1C"
+ SRC_MD_1=1C
DEST_MD_2=$PREFIX_DIR/MD/1CA
+ DEST_MD_2=/crypto/RSYNC/DIFFERENTIAL/SERVERS/MD/1CA
SRC_MD_2="1CA"
+ SRC_MD_2=1CA
DEST_MD_3=$PREFIX_DIR/MD/ACBP
+ DEST_MD_3=/crypto/RSYNC/DIFFERENTIAL/SERVERS/MD/ACBP
SRC_MD_3="ACBP"
+ SRC_MD_3=ACBP
DEST_BI_1=$PREFIX_DIR/BI/EXIM
+ DEST_BI_1=/crypto/RSYNC/DIFFERENTIAL/SERVERS/BI/EXIM
SRC_BI_1="exim"
+ SRC_BI_1=exim
DEST_BI_2=$PREFIX_DIR/BI/LETC
+ DEST_BI_2=/crypto/RSYNC/DIFFERENTIAL/SERVERS/BI/LETC
SRC_BI_2="l_etc"
+ SRC_BI_2=l_etc
DEST_BI_3=$PREFIX_DIR/BI/ETC
+ DEST_BI_3=/crypto/RSYNC/DIFFERENTIAL/SERVERS/BI/ETC
SRC_BI_3="etc"
+ SRC_BI_3=etc
ARR_SRV="OS BI DS MD NB"
+ ARR_SRV=OS BI DS MD NB
W_SRV="MD NB"
+ W_SRV=MD NB
####################################
### SERVERS RSYNC MODULES BACKUP ###
####################################
fbackup() {
# USAGE:
# First ARG = Server
# Second ARG = OS Type
# Third ARG = How much days to leave files
# Fourth ARG = Rsync modules digits number (equal 1234 etc)
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 0; fi
continue
;;
$2) if [ "$2" = "ALL" ]
then SRV=$ARR_SRV
else SRV=$2
fi
continue
;;
$3) SYS=$3
continue
;;
$4) if [ "$TYPE" = "D" ] && [ $4 -ge 1 ]
then WDEL=$4
elif [ "$TYPE" = "I" ] && [ "$4" = "N" ]
then
:
else exit 0
fi
continue
;;
$5) ARR=`echo $5 | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\)/\1 \2/;ta'`
for SLINE in $SRV
do
eval PORT=\$PORT_${SLINE}
for OSLINE in $W_SRV
do
if [ "$OSLINE" = "$SLINE" ]
then SYS="W"; fi
done
eval FLAGS=\$${SYS}_FLAGS
for LINE in $ARR
do
eval SRC=\$SRC_${SLINE}_${LINE}
eval DEST=\$DEST_${SLINE}_${LINE}
if [ -z "$SRC" ] || \
[ -z "$DEST" ] || \
[ -z "$PORT" ] || \
[ -z "$FLAGS" ]
then
continue
fi
if [ ! -d $DEST/$LDIR ]
then mkdir -p $DEST/$LDIR;fi
$RPATH $FLAGS --port=$PORT $USER\@localhost::$SRC $DEST/$LDIR
if [ "$TYPE" = "D" ]
then
find $DEST -type f -name '*.tar.gz' -mtime +$WDEL -exec rm -rf {} \;
find $DEST -type d -mtime +$WDEL -depth 1 -exec rm -rf {} \;
find $DEST/$LDIR -print > /tmp/tmplist
cd $DEST
if tar zcf /$LDIR.tar.gz $LDIR/* --from-file /tmp/tmplist
then rm -rf $LDIR
fi
fi
done
done
;;
$*) exit 0
;;
esac
done
}
#######################################
### DOING TAR OF BACKUPS ###
#######################################
tar() {
case "$*" in
$1) echo $1
if [ ! -d $PREFIX_DIR/$1 ]
then exit 0; fi
cd $PREFIX_DIR/$1
if tar zcf $LDIR.tar.gz $LDIR/*
then find $1 -type d -depth 1 -exec rm -rf {} \;;fi
;;
*) exit 0
;;
esac
}
fbackup $1 $2 $3 $4 $5
+ fbackup D OS U 1 1
+ TYPE=D
+ [ D = D ]
+ date +%d.%m.%Y
+ LDIR=08.03.2009
+ continue
+ [ OS = ALL ]
+ SRV=OS
+ continue
+ SYS=U
+ continue
+ [ D = D ]
+ [ 1 -ge 1 ]
+ WDEL=1
+ continue
+ [ D = D ]
+ [ 1 -ge 1 ]
+ WDEL=1
+ continue
Код: Выделить всё
#!/bin/sh
ldapdc="dc=domen,dc=com"
ldapcn="cn=root,$ldapdc"
ldapou="ou=dns,$ldapdc"
cnpass="mysuperpassword"
echo -n "domain name: " && read dname;
echo -n "zone name: " && read zname;
echo -n "ip address: " && read dipaddr;
echo "dn: relativeDomainName=$dname,zoneName=$zname,$ldapou
objectClass: top
objectClass: dNSZone
zoneName: $zname
relativeDomainName: $dname
dNSClass: IN
aRecord: $dipaddr" | ldapadd -x -D "$ldapcn" -w $cnpass
Код: Выделить всё
#! /bin/sh
lshal | awk '
$1 == "udi" {
while(length($0) > 0) {
s=s $0"\n"
if(/'"$*"'/ > 0)
found=1
getline
}
if(found > 0)
result=result s"\n"
s=""
found=0
}
END {
print result
}'
Код: Выделить всё
$ lshal-grep.sh input
udi = '/org/freedesktop/Hal/devices/usb_device_46d_c01e_noserial_if0'
freebsd.device_file = '/dev/ums0' (string)
freebsd.driver = 'ums' (string)
freebsd.unit = 0 (0x0) (int)
info.addons = {'hald-addon-mouse-sysmouse'} (string list)
info.bus = 'usb' (string)
info.capabilities = {'input', 'input.mouse'} (string list)
info.category = 'input.mouse' (string)
info.parent = '/org/freedesktop/Hal/devices/usb_device_46d_c01e_noserial' (string)
info.product = 'USB-PS/2 Optical Mouse' (string)
info.subsystem = 'usb' (string)
info.udi = '/org/freedesktop/Hal/devices/usb_device_46d_c01e_noserial_if0' (string)
info.vendor = 'Logitech' (string)
input.device = '/dev/sysmouse' (string)
input.x11_driver = 'mouse' (string)
input.x11_options.ZAxisMapping = '5 4' (string)
usb.freebsd.devname = 'ums0' (string)
usb.interface.class = 3 (0x3) (int)
usb.interface.description = '' (string)
usb.interface.number = 0 (0x0) (int)
usb.interface.protocol = 2 (0x2) (int)
usb.interface.subclass = 1 (0x1) (int)
usb_device.bus_number = 0 (0x0) (int)
usb_device.can_wake_up = true (bool)
usb_device.configuration = '' (string)
usb_device.configuration_value = 1 (0x1) (int)
usb_device.device_class = 0 (0x0) (int)
usb_device.device_protocol = 0 (0x0) (int)
usb_device.device_revision_bcd = 512 (0x200) (int)
usb_device.device_subclass = 0 (0x0) (int)
usb_device.is_self_powered = false (bool)
usb_device.level_number = 1 (0x1) (int)
usb_device.max_power = 98 (0x62) (int)
usb_device.num_configurations = 1 (0x1) (int)
usb_device.num_interfaces = 1 (0x1) (int)
usb_device.num_ports = 0 (0x0) (int)
usb_device.port_number = 2 (0x2) (int)
usb_device.product = 'USB-PS/2 Optical Mouse' (string)
usb_device.product_id = 49182 (0xc01e) (int)
usb_device.serial = '' (string)
usb_device.speed = 1.5 (1.5) (double)
usb_device.speed_bcd = 336 (0x150) (int)
usb_device.vendor = 'Logitech' (string)
usb_device.vendor_id = 1133 (0x46d) (int)
usb_device.version = 2.0 (2) (double)
udi = '/org/freedesktop/Hal/devices/usb_device_45e_dd_noserial_if0'
freebsd.driver = 'ukbd' (string)
freebsd.unit = 0 (0x0) (int)
info.bus = 'usb' (string)
info.capabilities = {'input', 'input.keyboard'} (string list)
info.category = 'input.keyboard' (string)
info.parent = '/org/freedesktop/Hal/devices/usb_device_45e_dd_noserial' (string)
info.product = 'product 0x00dd' (string)
info.subsystem = 'usb' (string)
info.udi = '/org/freedesktop/Hal/devices/usb_device_45e_dd_noserial_if0' (string)
info.vendor = 'Microsoft' (string)
input.device = '' (string)
input.x11_driver = 'kbd' (string)
input.xkb.layout = 'us(dvorak),ru(typewriter)' (string)
input.xkb.model = 'microsoftprousb' (string)
input.xkb.options = 'grp:caps_toggle,grp_led:caps,shift:breaks_caps,compose:rwin' (string)
usb.freebsd.devname = 'ukbd0' (string)
usb.interface.class = 3 (0x3) (int)
usb.interface.description = '' (string)
usb.interface.number = 0 (0x0) (int)
usb.interface.protocol = 1 (0x1) (int)
usb.interface.subclass = 1 (0x1) (int)
usb_device.bus_number = 0 (0x0) (int)
usb_device.can_wake_up = true (bool)
usb_device.configuration = '' (string)
usb_device.configuration_value = 1 (0x1) (int)
usb_device.device_class = 0 (0x0) (int)
usb_device.device_protocol = 0 (0x0) (int)
usb_device.device_revision_bcd = 512 (0x200) (int)
usb_device.device_subclass = 0 (0x0) (int)
usb_device.is_self_powered = false (bool)
usb_device.level_number = 2 (0x2) (int)
usb_device.max_power = 100 (0x64) (int)
usb_device.num_configurations = 1 (0x1) (int)
usb_device.num_interfaces = 2 (0x2) (int)
usb_device.num_ports = 0 (0x0) (int)
usb_device.port_number = 3 (0x3) (int)
usb_device.product = 'product 0x00dd' (string)
usb_device.product_id = 221 (0xdd) (int)
usb_device.serial = '' (string)
usb_device.speed = 1.5 (1.5) (double)
usb_device.speed_bcd = 336 (0x150) (int)
usb_device.vendor = 'Microsoft' (string)
usb_device.vendor_id = 1118 (0x45e) (int)
usb_device.version = 2.0 (2) (double)
Код: Выделить всё
#!/bin/sh
/usr/bin/grep "blocked using" /var/log/postfix.log | /usr/bin/awk '{print $10}' | /usr/bin/cut -d '[' -f2 | cut -d ']' -f1 >> /etc/PF/spammerip
/sbin/pfctl -f /etc/pf.conf
/sbin/pfctl -t spammerip -T show > /etc/PF/spammerip
/sbin/pfctl -f /etc/pf.conf
Код: Выделить всё
#!/bin/sh
event="denied|deny|failed"
ip="([0-9])+\.([0-9])+\.([0-9])+\.([0-9])+"
trusted="127.0.0.1|192.168.1.|192.168.55."
maillog="/var/log/maillog"
event_log="/usr/home/event.log"
ip_log="/usr/home/ip.log"
ipsort_log="/usr/home/ipsort.log"
norepeatip_log="/usr/home/norepeatip.log"
banlist="/usr/home/banlist.log"
if
# 1.Парсим по событию
cat $maillog | egrep "$event" > $event_log
# 2.Выдераем только IP
cat $event_log | egrep -o "$ip" > $ip_log
# 3.Сортируем IP
sort $ip_log > $ipsort_log
# 4.Удаляем дублированные IP
uniq $ipsort_log > $norepeatip_log
# 5.Убираем из отчета IP локальных сетей итд итп
cat $norepeatip_log | egrep -v "$trusted" > $banlist
# 6.Отправляем отчет на мыло админа
then
mail -s ban_list cancer@domain.ru < $banlist
fi
Код: Выделить всё
125.161.56.xxx
201.29.81.xxx
212.182.89.xxx
Код: Выделить всё
/usr/ports/lang/expect
Код: Выделить всё
#!/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
скобки использовать.xfOx писал(а):если в статике можна екранировать косие то как сделать если параметром берется - незнаю
можна пример? командаabanamat писал(а):скобки использовать.xfOx писал(а):если в статике можна екранировать косие то как сделать если параметром берется - незнаю
сам спросил - сам и отвечаюxfOx писал(а):можна пример? командаabanamat писал(а):скобки использовать.xfOx писал(а):если в статике можна екранировать косие то как сделать если параметром берется - незнаю
sed 's/<property name="tc037.url.toinstall" value=".*"\/>/<property name="tc037.url.toinstall" value='\"$my_cmd_arg"\'/>/g' имя файла
my_cmd_arg = http://10.0.0.151/download/archive.tgz ( к примеру)
Код: Выделить всё
#!/usr/local/bin/perl
my %rsync;
open (RSYNC, "/var/log/rsyncd.log");
while ($line = <RSYNC>)
{
my ($date, $time, $pid, $status, $sent, $hostname, $ip, $receive, $other) = split /\s+/, $line, 9;
if ($status =~ 'connect')
{
$rsync{$pid}->{'date'} = $date;
$rsync{$pid}->{'time'} = $time;
$rsync{$pid}->{'hostname'} = $hostname;
$rsync{$pid}->{'ip'} = $ip;
}
if ($status =~ 'sent')
{
$rsync{$pid}->{'sent'} = $sent;
$rsync{$pid}->{'receive'} = $receive;
}
}
print "Date \t\tTime \tIP \t\t Sent Bytes \t Receive Bytes\n";
foreach my $pid (sort { $rsync{$a}->{'date'} cmp $rsync{$b}->{'date'} } keys %rsync)
{
$rsync{$pid}->{'ip'} =~ s/\((\d+\.\d+\.\d+\.\d+)\)/$1/;
if ($rsync{$pid}->{'sent'} =~ /([0-9]+)/ )
{
print "$rsync{$pid}->{'date'} $rsync{$pid}->{'time'} $rsync{$pid}->{'ip'} \t $rsync{$pid}->{'sent'} \t $rsync{$pid}->{'receive'} \n";
}
}
Код: Выделить всё
2009/07/01 07:58:48 [35309] building file list
2009/07/01 07:59:55 [35309] sent 37822135 bytes received 902165 bytes total size 132841017999
2009/07/02 07:58:46 [84738] connect from raduga-ufa.ru (81.30.213.102)
2009/07/02 07:58:46 [84738] rsync on ftp/FreeBSD/ports/distfiles/ from raduga-ufa.ru (81.30.213.102)
2009/07/02 07:58:46 [84738] building file list
2009/07/02 07:59:55 [84738] sent 37822357 bytes received 929935 bytes total size 132877377250
2009/07/03 07:58:52 [21494] connect from raduga-ufa.ru (81.30.213.102)
2009/07/03 07:58:52 [21494] rsync on ftp/FreeBSD/ports/distfiles/ from raduga-ufa.ru (81.30.213.102)
2009/07/03 07:58:52 [21494] building file list
2009/07/03 08:00:02 [21494] sent 38365191 bytes received 934394 bytes total size 132877377250
Код: Выделить всё
Date Time IP Sent Bytes Receive Bytes
2009/03/08 23:03:11 89.189.158.194 1539635 839
2009/03/11 08:07:21 89.189.158.194 171780847 531796
2009/03/13 08:07:17 89.189.158.194 155419902 514505
2009/03/14 08:07:30 94.41.23.135 281920501 605598
2009/03/15 08:07:29 94.41.23.135 153144487 518707
2009/03/16 08:07:37 94.41.23.135 153144487 518707
2009/03/17 13:32:55 94.41.23.135 1539630 834
2009/03/21 16:01:36 92.50.175.199 1553147 839
2009/03/22 08:08:27 92.50.175.199 153153717 521987
2009/03/23 08:58:38 92.50.175.199 50157318 11285
Код: Выделить всё
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
# директории для бэкапов
backup_dir="/shares/array/backup"
remote_backup_dir="/mnt/nas/data/`hostname -s`/diff/`date -v-1d +%Y-%m-%d`"
# монтируем бэкапную шару
mount_nfs -i -s -T -t 2 -R 3 backup:/shares /mnt/nas
is_mount=$?
cd /shares/array/
rm -rf $backup_dir/*
mkdir -p $backup_dir
for dir in departments share_data user_data profiles
do
cp -Rp $dir $backup_dir/
# если бэкапная шара смонтировалась - делаем набор дополнительных действий
if [ "$is_mount" = "0" -a "$dir" != "profiles" ]
then
# создаём директорию для шары
mkdir -p $remote_backup_dir
# ищщем все файлы что модифицировались за последний день
cd $backup_dir/$dir
find . -type f -mtime -1 |
{
while read file
do
# достаём директорию где он лежит
filedir=`dirname "$file"`
# создаём директорию
mkdir -p "$remote_backup_dir/$dir/$filedir"
# копируем файл
cp -p "$file" "$remote_backup_dir/$dir/$filedir/"
done
}
cd $remote_backup_dir/
# конвертируем, чтоб нормально под виндой открывалось
convmv -r -f koi8-r -t cp866 --notest $dir
# делаем zip архив того что наковыряли
find $dir -type f | zip -r $dir.zip -@
rm -rf $remote_backup_dir/$dir
fi
done
# отмонтируем шару
cd
umount /mnt/nas &
# поспим, и ещё разик принудительно отмонтируем
sleep 600 && umount -f /mnt/nas &
exit
Правильнее будетDorlas писал(а):Код: Выделить всё
$rsync{$pid}->{'ip'} =~ s/\((\d+\.\d+\.\d+\.\d+)\)/$1/;
Код: Выделить всё
$rsync{$pid}->{'ip'} =~ s/\((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\)/$1/;
Код: Выделить всё
#!/bin/sh
#Сюда будем писать наш лог
PPP_RESTART_LOG="/var/log/ppp_restart.log"
#Формат даты и времени запуска
FMT="+%d-%m-%Y %H:%M:%S UTC"
#Ищем модем среди USB устройств, выделяем номер шины и адрес на шине
MODEM=`usbconfig | grep AnyDATA | sed -e's/ugen\([0-9]*\)\.\([0-9]*\).*/-u \1 -a \2/'`
if [ -z "${MODEM}" ]
then
#Ниче не нашли - сворачиваемся...
echo `date "${FMT}"` "[WARNING] No modem found!" >> ${PPP_RESTART_LOG}
exit
fi
#Получаем IP адрес шлюза по умолчанию
DEFAULT_GW=`netstat -rn | grep default | sed -e's/default[[:blank:]]*\([0-9.]*\).*/\1/`
#Проверяем удалось ли его получить
if [ -n "${DEFAULT_GW}" ]
then
#Пингуем шлюз и считаем сколько раз получилось
PINGS=`ping -c 3 ${DEFAULT_GW} | grep -c "64 bytes"`
else
#Если адрес шлюза не нашли, вероятно PPP не был поднят или
#что-то пошло не так в прошлый раз - перезапускаем (возможно
#есть смысл в таком случае просто закончить работу, тогда
#скрипт не будет задалбывать, если РРР был отключен вручную)
PINGS=0
echo `date "${FMT}"` "[WARNING] No default GW was found..." >> ${PPP_RESTART_LOG}
fi
if [ ${PINGS} -eq 0 ]
then
#Нет ответа --> пишим в лог и перезапускаем все
echo `date "${FMT}"` "[ERROR] No reply from the default GW (${DEFAULT_GW}) - restarting link..." >> ${PPP_RESTART_LOG}
#Убиваем РРР
killall ppp > /dev/null
#Отключаем модем
usbconfig ${MODEM} power_off
sleep 5
#Включаем модем
usbconfig ${MODEM} power_on
sleep 5
#Поднимаем РРР (подкорректируйте команду с учетом Ваших настроек РРР)
ppp -ddial MTC
echo `date "${FMT}"` "[INFO] The link was restarted..." >> ${PPP_RESTART_LOG}
fi
Раз в сутки стабильно, но бывают еще разные несистематические проблемы, например, пропал сигнал, разорвалось соединение (не по описанной причине) и т.п. результат один - модем висит. Так что каждые 2мин. для надежностиdetx писал(а):Если провайдер разрывает соединение раз в сутки, зачем же ему выполняться каждые 2 минуты???