timesync.sh
Код: Выделить всё
#!/bin/sh
ntd=" /usr/sbin/ntpdate "
timesrv=" ntp0.zenon.net " # впринципе здесь можно указать любой сервер ntp
$ntd -u -q $timesrv
echo "Time synchronized successfuly"
exit
Код: Выделить всё
#!/bin/sh
ntd=" /usr/sbin/ntpdate "
timesrv=" ntp0.zenon.net " # впринципе здесь можно указать любой сервер ntp
$ntd -u -q $timesrv
echo "Time synchronized successfuly"
exit
RaDiST_1977 писал(а):прстейший скрипт для синхронизации времени
Код: Выделить всё
cat /etc/rc.conf|grep ntpdate
ntpdate_enable="YES" # Run ntpdate to sync time on boot (or NO).
ntpdate_program="/usr/sbin/ntpdate" # path to ntpdate, if you want a different one.
ntpdate_flags="-b" # Flags to ntpdate (if enabled).
ntpdate_hosts="ntp0.zenon.net" # Whitespace-separated list of ntpdate(8) servers.
Код: Выделить всё
/etc/rc.d/ntpdate start
Код: Выделить всё
#!/bin/sh
# юзайте новую весию: http://www.lissyara.su/?id=1374
# даннынй скрипт парсит логи апача для заданного
# виртуалхоста, и ищет файлы, на которые апач дал
# 404 ответ. Т.к. на этот хост ходят тока филиальные
# сервера - за обновлениями, то это и будут файлы обновлений.
# тупо скачиваем их с одного из зеркал, и всё.
# переменные
home_dir="/shares/sites/clamav_mirror"
http_err_log="log/error.log"
http_root_dir="data"
clamav_mirror="database.clamav.net"
clamav_version_server="current.cvd.clamav.net"
# приложения
cat="/bin/cat"
grep="/usr/bin/grep"
awk="/usr/bin/awk"
sort="/usr/bin/sort"
uniq="/usr/bin/uniq"
fetch="/usr/bin/fetch"
host="/usr/bin/host"
tr="/usr/bin/tr"
# достаём имена файлов, что просили клиенты
${cat} ${home_dir}/${http_err_log} | ${grep} "File does not exist" \
| ${awk} -F "${http_root_dir}/" '{print $2}' | ${sort} \
| ${uniq} |
{
while read file_name
do
# топем в диру для обновлений
cd ${home_dir}/${http_root_dir}
# качаем обновление
${fetch} "http://${clamav_mirror}/${file_name}"
done
}
# очищаем лог апача
echo -n > ${home_dir}/${http_err_log}
# Новую версию кламав получает из DNS.
# выглядит это так:
# host -t txt current.cvd.clamav.net
# current.cvd.clamav.net descriptive text "0.91.2:44:4474:1191572941:1"
# значения полей, в общем-то понятны, но не все (нихрена не понял
# из исходников), те что понял - вот:
# 0.91.2 - текущая версия ClamAV
# 44 - версия main.cvd
# 4474 - версия daily.cvd
# 1191572941 - штамп веремни чтоли
# 1 -
# соответственно - парсим и достаём её - частота работы скрипта выше чем
# частота срабатываний freshclam - следовательно файл будет скачан
# заранее, и удасться избежать части 404 ошибок
# да и вообще - решение более красивое :)
# достаём TXT запись
txt_records="`${host} -t txt ${clamav_version_server} | \
${tr} -d '"' | ${awk} '{print $4}'`"
# разбираем на известные поля
main_cvd_ver="`echo ${txt_records} | ${awk} -F ':' '{print $2}'`"
daily_cvd_ver="`echo ${txt_records} | ${awk} -F ':' '{print $3}'`"
# проверяем наличие соответтсвующих файлов
if ! test -f ${home_dir}/${http_root_dir}/daily-${daily_cvd_ver}.cdiff
then
# качаем файл
cd ${home_dir}/${http_root_dir}
${fetch} "http://${clamav_mirror}/daily-${daily_cvd_ver}.cdiff"
fi
if ! test -f ${home_dir}/${http_root_dir}/main-${main_cvd_ver}.cdiff
then
cd ${home_dir}/${http_root_dir}
${fetch} "http://${clamav_mirror}/main-${main_cvd_ver}.cdiff"
fi
# Зеркалируем прочие файлы, что удалось вычислить (флаг -m у fetch)
cd ${home_dir}/${http_root_dir}
# daily.cvd
${fetch} -m "http://${clamav_mirror}/daily.cvd"
# main.cvd
${fetch} -m "http://${clamav_mirror}/main.cvd"
Ты с опеннета? или с ЛОР?онанистоус писал(а):Можно два тупых вопроса:
1) Че за тенденция пихать команды в переменные? Про alias'ы забыли?
2) Зачем писать полный путь до команды? PATH'а не хватает?
А то я не уловлю глубокого смысла в сем криптографическом коде.
пишу как хочу. не нравиться - пишите сами.онанистоус писал(а):Можно два тупых вопроса:
1) Че за тенденция пихать команды в переменные? Про alias'ы забыли?
2) Зачем писать полный путь до команды? PATH'а не хватает?
А то я не уловлю глубокого смысла в сем криптографическом коде.
Можешь привести примеры онных?lissyara писал(а):могу добавить, что иногда в скриптах используемых между сильно разными версиями платформ я встраиваю проверку наличия бинарников в указанном месте и выход в случае их отстутсвия.
а то наработает, без каконить приложения
http://www.lissyara.su/?id=1066Andy писал(а):Можешь привести примеры онных?lissyara писал(а):могу добавить, что иногда в скриптах используемых между сильно разными версиями платформ я встраиваю проверку наличия бинарников в указанном месте и выход в случае их отстутсвия.
а то наработает, без каконить приложения
Не угадал.Andy писал(а): А то я не уловлю глубокого смысла в сем криптографическом коде.
Ты с опеннета? или с ЛОР?
Такой умный? Почему же никто другой не додумался? Или хочешь сказать, что когда PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/pupkin/binAndy писал(а): Писать полный путь до команды, надо для того, что бы тебя не подъебнули с
левым файлом носящим такое же название.
lissyara писал(а): могу добавить, что иногда в скриптах используемых между сильно разными версиями платформ я встраиваю проверку наличия бинарников в указанном месте и выход в случае их отстутсвия.
а то наработает, без каконить приложения
Код: Выделить всё
# test existence
unset PATH
PATH=/bin:/sbin:/usr/bin:/usr/sbin # use only system binaries, no third parties
type >&- 2>&- cat grep awk sort uniq fetch || { echo blablabla; exit 1; }
Код: Выделить всё
sh=$(ls 2>&- /bin/sh) || { echo "sh(1) not found"; exit 1; }
sed=$(ls 2>&- /usr/bin/sed) || { echo "sed(1) not found"; exit 1; }
А кто тебе сказал, что файл .cshrc в домашней директории пользователя присутствует? Может его удалили уже за ненадобностью, причем неважно кто?онанистоус писал(а): Такой умный? Почему же никто другой не додумался? Или хочешь сказать, что когда PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/pupkin/bin
...написав route, каким-то чудесным образом запустится не /sbin/route, а /home/pupkin/bin/route и украдет привилегии? Случаем не игнорируем порядок?
Код: Выделить всё
Linux localhost.localdomain 2.6.18-std-smp-alt7 #1 SMP Sat Aug 4 00:07:54 MSD 2007 i686 GNU/Linux
Код: Выделить всё
[andy@localhost ~]$ pwd
/home/andy
[andy@localhost ~]$ ls -l
итого 161416
drwx------ 2 andy andy 4096 Окт 5 12:12 Desktop
drwx------ 2 andy andy 4096 Окт 4 20:15 Documents
-rw-r--r-- 1 andy andy 61095350 Окт 5 20:45 Ja.r01
-rw-r--r-- 1 andy andy 104000000 Окт 5 18:47 Ja.rar
-rwxr-xr-x 1 andy andy 30 Окт 5 13:21 man.sh
drwxr-xr-x 25 andy andy 4096 Окт 6 12:52 music
drwx------ 2 andy andy 4096 Окт 3 17:52 tmp
[andy@localhost ~]$
Код: Выделить всё
[andy@localhost ~]$ echo $PATH
/home/andy/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin:/usr/games:/usr/X11R6/bin
[andy@localhost ~]$
Код: Выделить всё
[andy@localhost ~]$ ping
Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]
[-p pattern] [-s packetsize] [-t ttl] [-I interface or address]
[-M mtu discovery hint] [-S sndbuf]
[ -T timestamp option ] [ -Q tos ] [hop1 ...] destination
[andy@localhost ~]$
Код: Выделить всё
#! /bin/sh
echo "hi!"
Код: Выделить всё
chmod +x ping
Код: Выделить всё
[andy@localhost ~]$ ping
hi!
[andy@localhost ~]$
Скрипты запускаешь от csh(1)? К тому же я юзаю /etc/csh.cshrcAndy писал(а): А кто тебе сказал, что файл .cshrc в домашней директории пользователя присутствует? Может его удалили уже за ненадобностью, причем неважно кто?
У-у-у, как все печально!Andy писал(а): Поглядим PATH пользователя по умолчанию.Код: Выделить всё
[andy@localhost ~]$ echo $PATH /home/andy/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin:/usr/games:/usr/X11R6/bin
Это с каких пор обычный юзверь имеет доступ на запись в /usr/local/bin? А знаешь, если, например, юзер будет иметь доступ на запись и исполнение хотябы к одному suid-файлу, то система компромитирована.Andy писал(а): Создадим в каталоге /usr/local/bin:/, файл ping следующего содержания:
Хм, а в POSIX разве входит nawk (в фре просто awk), sed, grep, jot, wget (во фре fetch), route, ifconfig и прочие прелести? По-моему только sh(1), test(1) и expr(1). Хотя хз, POSIX'ов много и все с разными номерами, т.к. bash вроде тоже POSIX.Andy писал(а): написание скриптов именно на /bin/sh, ибо есть такое понятие как POSIX. Уместно вспомнить коллегу Лиса, который офигел когда ему пришлось переписывать скрипты на /bin/sh.
На -current у новосозданного с абсолютно пустой дирой PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/test/binAndy писал(а): Прошу прощения, что на Линуксе, сейчас не могу во FreeBSD переключится. Однако как руки дойдут, попробую и там.
А причем тут весь линь? По вашему посту ясно у кого именно растут не понятно откуда и где надо принудительно выставлять свой PATH.Andy писал(а): И еще не надо орать, что мол Линукс г и вообще у них там все неправильно
Смысл в моих постах, что вот эта фраза - бред. Гарантировать результат можно только после тестов и то на ~50%.Andy писал(а): Если несколько строк кода способны однозначно гарантировать результат, по крайней мере с вероятностью 99 процентов, то не вижу причин их не написать.
онанистоус писал(а):да и я смотрю тут игнориют то, что некоторые утилиты могут быть в совершенно разных папках на разных системах. Вот тогда ваш полный путь до команды точно накроется.
Код: Выделить всё
# Проверяем наличие приложений - в разных версиях FreeBSD разные пути
for application in ${cat} ${awk} ${echo} ${grep} ${pw} ${rm} ${mkdir} \
${chown} ${php} ${cp} ${mysql} ${wc} ${cut} ${md5} ${jot} ${tail} \
${edquota} ${ls} ${chflags} ${tr} ${mysqldump} ${gzip} ${rm} ${mv} \
${basename} ${uname} ${php_ini}
do
if [ ! -s ${application} ]; then
echo "Приложение \`\`${application}'' не найдено! Проверьте путь!"
exit
fi
done
Код: Выделить всё
#!/bin/sh
external_IP="`/sbin/ifconfig iwi0 | grep inet | awk '{print $2}'`"
tmp_file="/tmp/ipacctd.traffic.$$.tmp"
logfile=$1
if [ $# -eq 1 ]
then
stime="`cat $logfile | sort -gk8 | head -1 | awk '{print $8}'`"
etime="`cat $logfile | sort -gk8 | tail -1 | awk '{print $8}'`"
stime="`date -r $stime`"
etime="`date -r $etime`"
cat $logfile | grep "^[0-9]" | grep -v "^$external_IP"| awk '
BEGIN { ib=0 }
{
ib=$6+ib
}
END {
printf "%s \n",ib
} ' > ${tmp_file}
read bytes_in < ${tmp_file}
cat $logfile | grep "^[0-9]" | grep "^$external_IP"| awk '
BEGIN { ob=0 }
{
ob=$6+ob
}
END {
printf "%s \n",ob
} ' > ${tmp_file}
read bytes_out < ${tmp_file}
rm ${tmp_file}
echo "$stime "-" $etime
IP: $external_IP
IN: `expr ${bytes_in} / 1048576` Mb
OUT: `expr ${bytes_out} / 1048576` Mb"
#echo ${bytes_in} ${bytes_out}
elif [ $# -eq 0 ]
then
echo "Please, select path to logfile."
else
stime=`date -j -f "%d/%m/%Y %H:%M:%S" "$2 00:00:00" "+%s"`
etime=`date -j -f "%d/%m/%Y %H:%M:%S" "$3 23:59:59" "+%s"`
#echo $stime $etime
cat $logfile | grep "^[0-9]" | grep -v "^$external_IP" | awk '
BEGIN { ib=0 }
{
if($8>='$stime' && $8<='$etime')
ib=$6+ib
}
END {
printf "%s \n",ib
}
' > ${tmp_file}
read bytes_in < ${tmp_file}
cat $logfile | grep "^[0-9]" | grep "^$external_IP" | awk '
BEGIN { ob=0 }
{
if($8>='$stime' && $8<='$etime')
ob=$6+ob
}
END {
printf "%s \n",ob
} ' > ${tmp_file}
read bytes_out < ${tmp_file}
rm ${tmp_file}
stime="`date -r $stime`"
etime="`date -r $etime`"
echo "$stime "-" $etime
IP: $external_IP
IN: `expr ${bytes_in} / 1048576` Mb
OUT: `expr ${bytes_out} / 1048576` Mb"
#echo ${bytes_in} ${bytes_out}
fi
exit 0
Код: Выделить всё
#!/bin/sh
#--------------- Packages fetch script ----------------
# Created by Dr_Phoenix 2007
# ===================================================
# My script can recursively fetch all dependent
# packages for each package defined in list file.
# All process history you can view in log file.
#------------------------------------------------------
cur_dir=`pwd`
mastersite="ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/i386/packages-7-current/All/" # Полный путь на ФТП сервер где лежат все пакеты
pkg_list_file="${cur_dir}/pkg_list" # Файл в котором перечислено то что надо закачать
dist_folder="${cur_dir}/packages" # Папка куда будут ложится пакеты
logfile="${cur_dir}/pk_get.log" # путь к лог-файлу(в даном случае в текущей директории)
part_downloaded_noskip=1 # 1-не пропускать недокачаные файлы 0-пропускать
clear
start_date=`date "+ %y-%m-%d %H:%M"`
machine=`hostname`
echo "Started on ${machine} at: $start_date" >> ${logfile}
wget_installed=`pkg_info | grep -c wget`
if [ -d ${dist_folder} ]; then
echo "Dist folder present! OK."
else
mkdir ${dist_folder}
echo "Dist folder created."
fi
if [ ${wget_installed} -eq 0 ]; then
echo "Wget not found. Trying to install it..."
cd /usr/ports/ftp/wget
make install clean
cd ${cur_dir}
fi
download_full_dep()
{
cd ${dist_folder}
wget -c ${mastersite}${pkg_name}
echo "--> PKG [OK] $pkg_name" >> $logfile
list_num=`pkg_info -r ${pkg_name} | grep -c Dependency`
list_to_fetch=`pkg_info -r ${pkg_name} | grep Dependency | cut -f 2 -d ":"`
echo "Needed ${list_num} depend files to ${pkg_name}"
echo "--> Needed ${list_num} depend files to ${pkg_name}" >> $logfile
count=1
while [ $count -le $list_num ]; do
pkg_cur_dist=`echo $list_to_fetch | cut -f $count -d " "`
echo "--> Downloading depend $pkg_cur_dist ..."
if [ -f "./${pkg_cur_dist}.tbz" ]; then
echo "Already downloaded..."
echo "Already downloaded $pkg_cur_dist.tbz" >> $logfile
if [ $part_downloaded_noskip ]; then
wget -c "${mastersite}${pkg_cur_dist}.tbz"
fi
else wget -c "${mastersite}${pkg_cur_dist}.tbz"
echo Done.
echo "Depend [OK] $pkg_cur_dist.tbz" >> $logfile
fi
count=`expr $count + 1`
done
}
#------- read & parse input file
if [ -f "$pkg_list_file" ]; then
files_list=`cat "$pkg_list_file"`
num_files=`cat $pkg_list_file | grep -c :`
echo "--> $num_files files in quie! "
echo "--> $num_files files in quie!" >> $logfile
countf=1
while [ $countf -le $num_files ]; do
f_position=`expr $countf + 1`
pkg_name=`echo $files_list | cut -f $f_position -d ":"`
download_full_dep
countf=`expr $countf + 1`
done
else touch $pkg_list_file
echo "Error! No files specified. Add filenames to $pkg_list_file"
echo "Format of each line is ':package_name.tbz' "
echo " :package_next.tbz"
fi
stop_date=`date "+ %y-%m-%d %H:%M"`
echo "All packages fetched on $machine at $stop_date" >> $logfile
Код: Выделить всё
#!/bin/sh
# Ввести лог 1-да/0-нет
log=0
# Юзеров в базе
online=4
# Ширина канала в интернет
bw=600000
# Файл лога
log_file="shaper.log"
# время
date_time="`date +%H:%M:%S`"
# дата
date="`date +%d-%m-%Y`"
date="`date | awk '{print $1,$2,$3,$4,$5}'`"
ips=$(jot $online)
for i in $ips
do
ip=$(cat users | sed -n ''$i'p' | awk '{print$2}')
test=$(ping -q -o -c 2 $ip | grep "packet loss" | awk '{print $4}')
if [ $test = 0 ]
then
online=$(expr $online - 1)
fi
done
if [ $online -gt 0 ]
then
bw=$(expr $bw / $online)
for p in $ips
do
pipe=$(cat users | sed -n ''$p'p' | awk '{print$3}')
ipfw pipe $pipe config bw $bw queue 10
done
fi
if [ $log = 1 ]
then
echo "-------------------------------
Дата: $date
Время: $date_time
Лимит на одного пользователя: $bw Kbit/s
Пользователей онлайн : $online
-------------------------------" >> $log_file
fi
Код: Выделить всё
1 192.168.0.1 1
2 192.168.0.2 2
3 192.168.0.3 3
4 192.168.0.4 4
Код: Выделить всё
> gismeteo
----
Ночь 16 дек, Вс:
пасмурно
без осадков
температура -3..-5 С
давление 754..756 мм рт.ст.
ветер Северо-Западный
4 м/с
----
Утро 16 дек, Вс:
облачно
небольшой снег
температура -1..-3 С
давление 754..756 мм рт.ст.
ветер Северный
4 м/с
----
День 16 дек, Вс:
облачно
небольшой снег
температура 0..-2 С
давление 755..757 мм рт.ст.
ветер Северный
4 м/с
----
Вечер 16 дек, Вс:
облачно
без осадков
температура -1..-3 С
давление 757..759 мм рт.ст.
ветер Северный
4 м/с
Код: Выделить всё
> gismeteo 38457
----
Ночь 16 дек, Вс:
облачно
без осадков
температура +1..+3 С
давление 720..722 мм рт.ст.
ветер Юго-Восточный
3 м/с
----
Утро 16 дек, Вс:
малооблачно
без осадков
температура +7..+9 С
давление 720..722 мм рт.ст.
ветер Юго-Восточный
4 м/с
----
День 16 дек, Вс:
пасмурно
без осадков
температура +5..+7 С
давление 720..722 мм рт.ст.
ветер Юго-Восточный
3 м/с
----
Вечер 16 дек, Вс:
пасмурно
без осадков
температура +4..+6 С
давление 721..723 мм рт.ст.
ветер Юго-Восточный
2 м/с
Код: Выделить всё
#! /bin/sh
id=${1:-27612}
fetch -qao - http://informer.gismeteo.ru/rss/$id.xml \
| iconv -f cp1251 \
| sed '#n
/item/,// {
/.*<\(title\)>.*:[[:space:]]*\(.*\)<\/\1>.*/ {
i\
[1;31m----[22;39m
s//\2:/
:x
s/[-[:digit:]]/[1;32m&[22;39m/g
p
}
/.*<\(description\)>\(.*\)<\/\1>.*/ {
s//\2/
s/\, /,/g
y/,/\n/
bx
}
}'
Код: Выделить всё
# vi /usr/local/etc/exim/configure
...
log_file_path = syslog : /var/log/exim/%s-%D.log
...
Код: Выделить всё
# vi /etc/periodic.conf
...
# 465.exim-mail-statistic
daily_exim_mail_statistic_enable="YES"
...
Код: Выделить всё
# cat > /usr/local/etc/periodic/daily/465.exim-mail-statistic
if [ -r /etc/defaults/periodic.conf ]
then
. /etc/defaults/periodic.conf
source_periodic_confs
fi
LOG="/var/log/exim"
main_log="${LOG}/main-"`date -v-1d "+%Y%m%d"`.log
reject_log="${LOG}/reject-"`date -v-1d "+%Y%m%d"`.log
case "$daily_exim_mail_statistic_enable" in
[Yy][Ee][Ss])
echo ""
echo "**************** EXIM statistic started **********************"
n=$([ -f $main_log ] && /usr/local/sbin/eximstats -ne $main_log | tee /dev/stderr | wc -l)
[ -f $main_log ] && rm $main_log
[ -f $reject_log ] && rm $reject_log
echo "**************** EXIM statistic ended ************************"
[ $n -gt 0 ] && rc=1 || rc=0;;
*) rc=0;;
esac
Код: Выделить всё
# chmod +x /usr/local/etc/periodic/daily/465.exim-mail-statistic
Код: Выделить всё
#!/bin/sh
# process file by sed: resolve IPs to names
pip=`netstat -rn |grep default|awk '{print $2}'`
#dip=`ifconfig | grep $pip | awk '{print $2}'`
#res="s/$dip/gate/g;s/10.0.0.1/gate/g;"
res="s/10.0.0.1/gate/g;"
fleas="/var/db/dhcpd/dhcpd.leases"
fhost="/etc/hosts"
ip=""
cat $fleas |
{
# get from dhcp lease file
while read p1 p2 p3 p4
do
# get next lease IP
if [ "$p1" = "lease" ]; then
ip=$p2
fi
# check for free...
if [ "$ip" != "" -a "$p1" = "binding" -a "$p2" = "state" -a "$p3" = "free" ]; then
#-o "$ip" != "" -a "$p1" = "ends" -a ]; then
ip=""
fi
if [ "$p1" = "client-hostname" -a "$ip" != "" ]; then
nam=`echo $p2 | awk -F'"' '{print $2}'`
res="${res}s/${ip}/${nam}/g;"
ip=""
fi
done
# gethost names from hosts file
cat $fhost |
{
while read p1 p2 p3 p4 p5 p6 p7 p8 p9
do
if [ "$p1" != "" ]; then
res="${res}s/${p1}/${p2}/g;"
fi
done
echo $res
sed -e "$res" /var/log/IP_ACC > /var/log/IP_ACC_RES
}
}
возникли след. вопросыproxy-man писал(а):заменил свою "самоделку" предназначенную для бана хостов, которые под левыми юзреми ломятся на ssh - выглядит теперь так:
Хотя моя мысль, что такие вещи лучше писать на perl-е ибо у последнего больше вариантов при работе с регулярными выражениями ))Код: Выделить всё
#!/usr/local/bin/zsh ##################################################### # This script closes illegal attempts of login into # # system and adds the essential rule to firewall # ##################################################### # vars # CAT="/bin/cat" GREP="/usr/bin/grep" AWK="/usr/bin/awk" UNIQ="/usr/bin/uniq" WC="/usr/bin/wc" LOG="/usr/SHELL/auth.log" FIREWALL="/etc/rc.firewall" FDENY="/usr/SHELL/deny_hosts" IPFW="/sbin/ipfw" ############################################## # parsing the log file and creatina an array # ARR=(`${CAT} ${LOG}|${GREP} 'Invalid user *'|${AWK} '{print $10}'|${UNIQ}`) ################################################################ # create function for add data from an array to a special file # f_deny(){ for name in ${ARR}; do # if IP exists into the file - stop procedure COUNT=`${CAT} ${FDENY}|${AWK} "/${name}$/"|${WC} -l` if [ ${COUNT} -ge "1" ]; then continue else # if IP doesn't exist - put it into the file echo $name >> ${FDENY} fi done } ############################################################ # check if a file exists for deny hosts and start function # if [ -e ${FDENY} ]; then f_deny else touch ${FDENY} f_deny fi #################### # restart firewall # ${IPFW} -f flush && /bin/sh < /etc/rc.firewall &
Код: Выделить всё
hosting# cat apache.traff.sh
#!/bin/sh
# traffic file
traff_file="/var/log/httpd/traffic.log"
# MySQL
mysql_user="hosting_traffic"
mysql_pass="hosting_traffic"
mysql_db="hosting_traffic"
mysql_bin="/usr/local/bin/mysql"
# tmp file
tmp_file="/tmp/traffic.log"
# mysql connect data
mysql_conn="${mysql_bin} --user=${mysql_user} --password=${mysql_pass} --database=${mysql_db}"
# year
year="`date -v-1d +%Y`"
old_date="`date -v-1d +%Y-%m-%d`"
# flush temporary table
${mysql_conn} --execute="TRUNCATE TABLE \`tmp_traffic_table\`"
# move file statistic
/bin/cat ${traff_file} > ${tmp_file}
echo -n > ${traff_file}
# loading data from file into temporary table
${mysql_conn} --execute="LOAD DATA INFILE '${tmp_file}' INTO TABLE \`tmp_traffic_table\` FIELDS TERMINATED BY ' ' LINES TERMINATED BY '\n'"
# create table, if not exists
${mysql_conn} --execute="CREATE TABLE IF NOT EXISTS \`http_traff_${year}\` ( \
\`uniq_id\` int(6) NOT NULL auto_increment, \
\`curr_date\` date NOT NULL, \
\`vhost\` varchar(127) NOT NULL, \
\`input\` int(12) NOT NULL, \
\`output\` int(12) NOT NULL, \
PRIMARY KEY (\`uniq_id\`), \
UNIQUE KEY \`date_vhost\` (\`curr_date\`,\`vhost\`), \
KEY \`curr_date\` (\`curr_date\`) \
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;"
${mysql_conn} --execute="INSERT INTO \`http_traff_${year}\` \
(\`curr_date\`, \`vhost\`, \`input\`, \`output\`) \
SELECT '${old_date}', \`vhost\`, SUM(\`input\`), SUM(\`output\`)\
FROM \`tmp_traffic_table\` GROUP BY \`vhost\`"
Код: Выделить всё
LogFormat "%v %I %O" traffic
Код: Выделить всё
CustomLog /var/log/httpd/traffic.log traffic
время будет - напишу.serge писал(а):Вот бы еще для использования памяти и проца по пользователям...