19.10.2010, 16:16
Вариаций данного скрипта на просторах сети очень много, вот мой, который я использую для сохранения копий MySQL баз данный, он сохраняет каждую базу в отдельности и пакует их при помощи gzip, так же есть возможность игнорировать определенные базы.
#!/bin/bash
#
#Buckup MySQL databases
#v0.1 base
#v0.11 Added chmod and chown
#v0.12 gzip bases MySQLuser="root"
MySQLuser="user" # username with Grand priveleges
MySQLuserPass="password" # password for user
MySQLhost="localhost" # hostname or IP of MySQL server # Linux bin paths change it if needed
# Linux bin paths change it if needed
MYSQL="mysql"
MYSQLDUMP="mysqldump"
GZIP="gzip"
# Backup dest directory
dest="/root/tmp"
# Main directory where backup will be stored
main="$dest/test"
# Get data in dd-mm-yyyy format
time_now="$(date +"%d-%m-%Y")"
# DO NOT BACKUP these databases, use space between bases.
ignore="test vmail"
[ ! -d $main ] && mkdir -p $main || :
# Only root can access it!
chown root:root -R $dest
chmod 0600 $dest # Get database list
#Starting buckup precess
enter="$($MYSQL -u $MySQLuser -h $MySQLhost -p$MySQLuserPass -Bse 'show databases')" #Buckup process
for db in $enter
do
skipdb=-1
if [ "$ignore" != "" ];
then
for i in $ignore
do
[ "$db" == "$i" ] && skipdb=1 || :
done
fi
if [ "$skipdb" == "-1" ] ; then
FILE="$main/$db.$MySQLhost.$time_now.gz"
# do all inone job in pipe,
# connect to mysql using mysqldump for select mysql database
# gzip after that
$MYSQLDUMP -u $MySQLuser -h $MySQLhost -p$MySQLuserPass $db | $GZIP -9 > $FILE
fi
done
Количество просмотров :2500
19.10.2010, 15:13
Иногда есть необходимость перевернуть текстовый файл, то есть, сделать так что бы, первая строка стала последней, а последняя стала первой, вторая стала предпоследней, а предпоследняя второй ну и так далее, для этого можно использовать вот такой скрипт:
#!/bin/bash
#
#Script to reverse text file v0.11
file="$1"
if [ $# -eq 0 ]; then
echo "$(basename $0) - file-name"
exit 1
fi textArray[0]="" # hold text
c=0 # counter
# read whole file in loop
while read line
do
textArray[$c]=$line # store line
c=$(expr $c + 1) # increase counter by 1
done < $file
# get length of array
len=$(expr $c - 1 ) # use for loop to reverse the array
for (( i=$len; i>=0; i-- ));
do
echo ${textArray[$i]} >> $file".new"
done
Если сохранить данный скрипт в файле script, то запускаем мы его:
./script <имя обрабатываемого файла>
Количество просмотров :4369
19.10.2010, 13:33
Есть два способа, первый, когда запускаете yum, можно использовать опцию —exclude=
yum —exclude=package* update
yum —exclude=php* update
yum —exclude=*rrd* update
yum —exclude=kernel*,*snmp,perl* update
Второй, он более радикальный, можно добавить исключение в конфиг файл /etc/yum.conf :
exclude=php* kernel*
Выглядеть это будет так:
[main]
cachedir=/var/cache/yum
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude=php* kernel*
Количество просмотров :10354
18.10.2010, 17:35
Обычно, MySQL начинает авто инкремент с 1. Это означает, что каждая первая запись в таблице имеет номер 1, вторая запись номер 2, и так далее. Иногда может быть полезным начать нумерацию с другого числа. Многие не знаю, что для есть простой способ для начала нумерации с определенного числа, необходимо выполнить такую команду:
ALTER TABLE table AUTO_INCREMENT = 100;
В примере нумерация начнется со 100.
Количество просмотров :4398
18.10.2010, 14:58
Иногда нужно узнать дату через определенный период времени, в PhP для этого можно воспользоваться функцией strtotime(), как пример:
<?php
//Сегодня
$start = date("Y-m-d");
//1 месяц вперед
$time_m = date("Y-m-d",strtotime("+1 months"));
//25 дней вперед
$time_d = date("Y-m-d",strtotime("+25 days"));
//Дата через год
$time_d = date("Y-m-d",strtotime("+1 years"));
?>
Эту же функцию strtotime() можно применять для получения unix timestamp:
<?php
$start = date("Y-m-d");
$timestamp = strtotime($date);
?>
Количество просмотров :9383
15.10.2010, 15:49
Ох уж эти оповещения, и ладно, если у вас крон запускает одно приложение в сутки, но если он это делает каждые пять минут, да еще и не одно а несколько скриптов и приложений, то через некоторое время эти оповещения начинают надоедать. Да можно настроить всяких фильтров в почтовой программе, но проще эти оповещения отключить. И так, есть два способа отключить оповещения, первый, в конце каждой строки запуска добавлять —
>/dev/null 2>&1 или &> /dev/null
Как пример:
0 1 5 10 * /path/to/script.sh >/dev/null 2>&1
или
0 1 5 10 * /path/to/script.sh &> /dev/null
Обязательно перезапустите крон.
Второй способ это изменить MAILTO= на:
MAILTO=»»
Количество просмотров :2120
13.10.2010, 16:28
И так, давайте подробно рассмотрим, как говориться шаг за шагом. Сразу хочу оговориться, что мой MTA — Postfix
Заходим в директорию mailman на старом сервере и создаем бакап нам необходимых директорий, это ./data ./archives ./lists:
tar -cvf move.tar ./data ./archives ./lists
Копируем этот файл на новый сервер, можно воспользоваться WinSCP например. Далее инсталлируем mailman. Загружаем и распаковываем последнюю версию mailman например отсюда.
Читать продолжении статьи: Настраиваем Mailman на новом сервере. Переносим рассылки со старого. »
Количество просмотров :5354
12.10.2010, 15:45
Мой почтовый релей уже почти готов, и думаю, что завтра я наконец-то смогу запустить его и у меня будет чуть больше времени на другие проекты. А пока, скрипт для удаления одинаковых строк в файле:
#!/usr/bin/perl -w
use strict;
my $origfile = shift;
my $outfile = "no_dupes_" . $origfile;
my %hTmp;
open (IN, "<$origfile") or die "Couldn't open input file: $!";
open (OUT, ">$outfile") or die "Couldn't open output file: $!";
while (my $sLine = <IN>) {
next if $sLine =~ m/^\s*$/; #remove empty lines
#Without the above, still destroys empty lines except for the first one.
print OUT $sLine unless ($hTmp{$sLine}++);
}
close OUT;
close IN;
Если сохранить данный скрипт в файле script.pl, то запускаем мы его:
perl script.pl <имя обрабатываемого файла
Количество просмотров :5103
11.10.2010, 14:36
Все очень просто:
CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table SELECT * FROM db1.table;
db2 — база в которую копируем
db1 — база из которой копируем
table — название таблицы
Количество просмотров :17026
11.10.2010, 11:41
Не всегда есть необходимость городить огороды и настраивать всякие Исинги и Нагиосы, эти программы удобны если у вам необходимо мониторить действительно большое количество хостов и главное, большое количество параметров этих хостов. Если вам для мониторинга достаточно пинга, то вам пригодиться этот скрипт:
#!/bin/bash
# Ping monitoring script v0.12
# Добавляем ip или имена хостов через пробел.
HOSTS="172.16.0.1 eddnet.com 172.16.0.2"
# Количество пингов
COUNT=1
# Настройка почты
EMAILID="me@eddnet.org"
for mhost in $HOSTS
do
count=$(ping -c $COUNT $mhost | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
if [ $count -eq 0 ]; then
SUBJECT="Проблемы с пингом на: $mhost"
# 100% failed
echo "[$date]: Host - $mhost не откликаеться" | mail -s "$SUBJECT" $EMAILID
fi
done
Количество просмотров :6954