Например, работают на сервере форума
System FS1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
#!/bin/bash
#
sname="dragon.itwrks.org"
archdir="/tmp/backup/$sname/fs"
dstdir="/mnt/yadisk/itwrks/IT-WORKS/BACKUP/$sname/fs"
tdate=`date '+%Y%m%d%H%M%S'`
problem="Failed to make system backup on $sname"
success="System backup on $sname has been completed successfully"
email=root
RETVAL=0
#
# Define TAR
tcmd="tar -cvjf"
tsuffix="tar.bz2"
TAR[0]="root_$tdate.$tsuffix \
--exclude=/root/.cache \
--exclude=/root/.cpanm \
--exclude=/root/.local \
/root"
TAR[1]="etc_$tdate.$tsuffix /etc"
TAR[2]="opt_$tdate.$tsuffix \
--exclude=/opt/etc \
--exclude=/opt/itwrks/backup \
/opt"
TAR[3]="var_spool_cron_$tdate.$tsuffix /var/spool/cron"
#
if [ -f $dstdir/flag ] ; then
rm -f $dstdir/flag
fi
#echo -n "Check $archdir... press Enter:"
#read
if [ ! -d $archdir ] ; then
mkdir -p $archdir
chown root:root $archdir
chmod 750 $archdir
fi
#echo -n "Purge $archdir... press Enter:"
#read
for file in `ls $archdir`
do
rm -f $archdir/$file
done
#echo -n "Start TAR... press Enter:"
#read
cd $archdir
ttar=0
while [ $ttar -lt ${#TAR[*]} ]
do
$tcmd ${TAR[$ttar]}
ttar=$(( $ttar+1 ))
done
#echo -n "Check how many files were backuped... press Enter:"
#read
if [ "`ls $archdir | grep $tdate.$tsuffix | wc -l`" != "${#TAR[*]}" ]; then
echo "The number of bak files in $archdir and number of files to backup aren't eq!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Check mount... press Enter:"
#read
if [ ! -d $dstdir ] ; then
echo "Failed to check whether directory $dstdir is mounted!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Copy to destination... press Enter:"
#read
cp $archdir/*_$tdate.$tsuffix $dstdir
#echo -n "Check number of files... press Enter:"
#read
if [ "`ls $archdir | grep $tdate.$tsuffix | wc -l`" != "`ls $dstdir | grep $tdate.$tsuffix | wc -l`" ]; then
echo "The number of bak files in $archdir and files in $dstdir aren't eq!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Check md5sum... press Enter:"
#read
checksum() {
NEW="$1"
OLD="$archdir/`basename $NEW`"
#if [ "`cat $OLD | md5sum`" != "`cat $NEW | md5sum`" ]; then
if [ "`md5sum $OLD | cut -f1 -d ' '`" != "`md5sum $NEW | cut -f1 -d ' '`" ]; then
echo "Failed to check md5sum of $NEW!" | mail -s "$problem" $email
exit 88
fi
}
for file in `ls $dstdir | grep $tdate.$tsuffix`
do
checksum $dstdir/$file
done
RETVAL=$?
[ $RETVAL == 0 ] && touch $dstdir/flag
#echo -n "Start report... press Enter:"
#read
report() {
count=`ls $archdir | grep $tdate.$tsuffix | wc -l`
touch $archdir/report
echo "$success." > $archdir/report
echo "Archive files were copied to $dstdir." >> $archdir/report
echo "" >> $archdir/report
echo "There were made $count archives." >> $archdir/report
echo "" >> $archdir/report
echo "size:" >> $archdir/report
for file in `ls $archdir | grep $tdate.$tsuffix`
do
du -sh $archdir/$file >> $archdir/report
done
echo "" >> $archdir/report
echo "md5sum:" >> $archdir/report
for file in `ls $archdir | grep $tdate.$tsuffix`
do
md5sum $archdir/$file >> $archdir/report
done
echo "" >> $archdir/report
echo "`date`" >> $archdir/report
cat $archdir/report | mail -s "$success" $email
}
if [ ! -f $dstdir/flag ] ; then
echo "Failed to check flag file! Problem has been occured during backup!" | mail -s "$problem" $email
exit 88
fi
report
#echo -n "Remove local bak files... press Enter:"
#read
for file in `ls $archdir --hide=report`
do
rm -f $archdir/$file
done
#echo -n "End... press Enter:"
#read
WWW_directory1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
#!/bin/bash
#
sname="dragon.itwrks.org"
archdir="/tmp/backup/$sname/www"
dstdir="/mnt/yadisk/itwrks/IT-WORKS/BACKUP/$sname/www"
tdate=`date '+%Y%m%d%H%M%S'`
problem="Failed to make WWW backup on $sname"
success="WWW backup on $sname has been completed successfully"
email=root
RETVAL=0
#
# Define TAR
tcmd="tar -cvjf"
tsuffix="tar.bz2"
TAR[0]="itwrks.org_$tdate.$tsuffix \
--exclude=/var/www/html/public/itwrks.org/downloads \
--exclude=/var/www/html/public/itwrks.org/test_gallery \
/var/www/html/public/itwrks.org"
TAR[1]="nosql.itwrks.org_$tdate.$tsuffix \
--exclude=/var/www/html/public/nosql.itwrks.org/forum \
--exclude=/var/www/html/public/nosql.itwrks.org/forum-old \
--exclude=/var/www/html/public/nosql.itwrks.org/album/pictures \
--exclude=/var/www/html/public/nosql.itwrks.org/album/thumbs \
--exclude=/var/www/html/public/nosql.itwrks.org/vstrechy/pictures \
--exclude=/var/www/html/public/nosql.itwrks.org/vstrechy/thumbs \
/var/www/html/public/nosql.itwrks.org"
TAR[2]="nosql.itwrks.org_forum_$tdate.$tsuffix \
--exclude=/var/www/html/public/nosql.itwrks.org/forum/log \
--exclude=/var/www/html/public/nosql.itwrks.org/forum/tmp \
--exclude=/var/www/html/public/nosql.itwrks.org/forum/user_data/attachments \
--exclude=/var/www/html/public/nosql.itwrks.org/forum/user_data/avatars \
--exclude=/var/www/html/public/nosql.itwrks.org/forum/user_data/custom_smileys \
--exclude=/var/www/html/public/nosql.itwrks.org/forum/user_data/photos \
--exclude=/var/www/html/public/nosql.itwrks.org/forum/user_data/thumbs \
/var/www/html/public/nosql.itwrks.org/forum"
TAR[3]="anton.koudinov.ru_$tdate.$tsuffix \
/var/www/html/public/anton.koudinov.ru"
#
if [ -f $dstdir/flag ] ; then
rm -f $dstdir/flag
fi
#echo -n "Check $archdir... press Enter:"
#read
if [ ! -d $archdir ] ; then
mkdir -p $archdir
chown root:root $archdir
chmod 750 $archdir
fi
#echo -n "Purge $archdir... press Enter:"
#read
for file in `ls $archdir`
do
rm -f $archdir/$file
done
#echo -n "Start TAR... press Enter:"
#read
cd $archdir
ttar=0
while [ $ttar -lt ${#TAR[*]} ]
do
$tcmd ${TAR[$ttar]}
ttar=$(( $ttar+1 ))
done
#echo -n "Check how many files were backuped... press Enter:"
#read
if [ "`ls $archdir | grep $tdate.$tsuffix | wc -l`" != "${#TAR[*]}" ]; then
echo "The number of bak files in $archdir and number of files to backup aren't eq!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Check mount... press Enter:"
#read
if [ ! -d $dstdir ] ; then
echo "Failed to check whether directory $dstdir is mounted!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Copy to destination... press Enter:"
#read
cp $archdir/*_$tdate.$tsuffix $dstdir
#echo -n "Check number of files... press Enter:"
#read
if [ "`ls $archdir | grep $tdate.$tsuffix | wc -l`" != "`ls $dstdir | grep $tdate.$tsuffix | wc -l`" ]; then
echo "The number of bak files in $archdir and files in $dstdir aren't eq!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Check md5sum... press Enter:"
#read
checksum() {
NEW="$1"
OLD="$archdir/`basename $NEW`"
#if [ "`cat $OLD | md5sum`" != "`cat $NEW | md5sum`" ]; then
if [ "`md5sum $OLD | cut -f1 -d ' '`" != "`md5sum $NEW | cut -f1 -d ' '`" ]; then
echo "Failed to check md5sum of $NEW!" | mail -s "$problem" $email
exit 88
fi
}
for file in `ls $dstdir | grep $tdate.$tsuffix`
do
checksum $dstdir/$file
done
RETVAL=$?
[ $RETVAL == 0 ] && touch $dstdir/flag
#echo -n "Start report... press Enter:"
#read
report() {
count=`ls $archdir | grep $tdate.$tsuffix | wc -l`
touch $archdir/report
echo "$success." > $archdir/report
echo "Archive files were copied to $dstdir." >> $archdir/report
echo "" >> $archdir/report
echo "There were made $count archives." >> $archdir/report
echo "" >> $archdir/report
echo "size:" >> $archdir/report
for file in `ls $archdir | grep $tdate.$tsuffix`
do
du -sh $archdir/$file >> $archdir/report
done
echo "" >> $archdir/report
echo "md5sum:" >> $archdir/report
for file in `ls $archdir | grep $tdate.$tsuffix`
do
md5sum $archdir/$file >> $archdir/report
done
echo "" >> $archdir/report
echo "`date`" >> $archdir/report
cat $archdir/report | mail -s "$success" $email
}
if [ ! -f $dstdir/flag ] ; then
echo "Failed to check flag file! Problem has been occured during backup!" | mail -s "$problem" $email
exit 88
fi
report
#echo -n "Remove local bak files... press Enter:"
#read
for file in `ls $archdir --hide=report`
do
rm -f $archdir/$file
done
#echo -n "End... press Enter:"
#read
SQL dump1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
#!/bin/bash
#
sname="dragon.itwrks.org"
archdir="/tmp/backup/$sname/db"
dstdir="/mnt/yadisk/itwrks/IT-WORKS/BACKUP/$sname/db"
tdate=`date '+%Y%m%d%H%M%S'`
problem="Failed to make SQL backup on $sname"
success="SQL backup on $sname has been completed successfully"
email=root
RETVAL=0
# SQL dump
mysqldump -hlocalhost -uroot --routines --triggers --single-transaction --quick --max_allowed_packet=32M --lock-tables=false NOSQL > /opt/itwrks/backup/db/NOSQL_$tdate.sql
#
#
# Define TAR
tcmd="tar -cvjf"
tsuffix="tar.bz2"
TAR[0]="DB_NOSQL_$tdate.$tsuffix /opt/itwrks/backup/db/NOSQL_$tdate.sql"
#
if [ -f $dstdir/flag ] ; then
rm -f $dstdir/flag
fi
#echo -n "Check $archdir... press Enter:"
#read
if [ ! -d $archdir ] ; then
mkdir -p $archdir
chown root:root $archdir
chmod 750 $archdir
fi
#echo -n "Purge $archdir... press Enter:"
#read
for file in `ls $archdir`
do
rm -f $archdir/$file
done
#echo -n "Start TAR... press Enter:"
#read
cd $archdir
ttar=0
while [ $ttar -lt ${#TAR[*]} ]
do
$tcmd ${TAR[$ttar]}
ttar=$(( $ttar+1 ))
done
#echo -n "Check how many files were backuped... press Enter:"
#read
if [ "`ls $archdir | grep $tdate.$tsuffix | wc -l`" != "${#TAR[*]}" ]; then
echo "The number of bak files in $archdir and number of files to backup aren't eq!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Check mount... press Enter:"
#read
if [ ! -d $dstdir ] ; then
echo "Failed to check whether directory $dstdir is mounted!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Copy to destination... press Enter:"
#read
cp $archdir/*_$tdate.$tsuffix $dstdir
#echo -n "Check number of files... press Enter:"
#read
if [ "`ls $archdir | grep $tdate.$tsuffix | wc -l`" != "`ls $dstdir | grep $tdate.$tsuffix | wc -l`" ]; then
echo "The number of bak files in $archdir and files in $dstdir aren't eq!" | mail -s "$problem" $email
exit 88
fi
#echo -n "Check md5sum... press Enter:"
#read
checksum() {
NEW="$1"
OLD="$archdir/`basename $NEW`"
#if [ "`cat $OLD | md5sum`" != "`cat $NEW | md5sum`" ]; then
if [ "`md5sum $OLD | cut -f1 -d ' '`" != "`md5sum $NEW | cut -f1 -d ' '`" ]; then
echo "Failed to check md5sum of $NEW!" | mail -s "$problem" $email
exit 88
fi
}
for file in `ls $dstdir | grep $tdate.$tsuffix`
do
checksum $dstdir/$file
done
RETVAL=$?
[ $RETVAL == 0 ] && touch $dstdir/flag
#echo -n "Start report... press Enter:"
#read
report() {
count=`ls $archdir | grep $tdate.$tsuffix | wc -l`
touch $archdir/report
echo "$success." > $archdir/report
echo "Archive files were copied to $dstdir." >> $archdir/report
echo "" >> $archdir/report
echo "There were made $count archives." >> $archdir/report
echo "" >> $archdir/report
echo "size:" >> $archdir/report
for file in `ls $archdir | grep $tdate.$tsuffix`
do
du -sh $archdir/$file >> $archdir/report
done
echo "" >> $archdir/report
echo "md5sum:" >> $archdir/report
for file in `ls $archdir | grep $tdate.$tsuffix`
do
md5sum $archdir/$file >> $archdir/report
done
echo "" >> $archdir/report
echo "`date`" >> $archdir/report
cat $archdir/report | mail -s "$success" $email
}
if [ ! -f $dstdir/flag ] ; then
echo "Failed to check flag file! Problem has been occured during backup!" | mail -s "$problem" $email
exit 88
fi
report
#echo -n "Remove local bak files... press Enter:"
#read
for file in `ls $archdir --hide=report`
do
rm -f $archdir/$file
done
rm -f /opt/itwrks/backup/db/NOSQL_$tdate.sql
#echo -n "End... press Enter:"
#read
Комплексный скрипт для вызова по расписанию
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
#!/bin/bash
#
sname="dragon.itwrks.org"
scdir="/opt/itwrks/scripts"
sc_backup_sys="$scdir/backup_sys.sh"
sc_backup_www="$scdir/backup_www.sh"
sc_backup_sql="$scdir/backup_sql.sh"
email=root
RETVAL=0
do_backup_sys() {
$sc_backup_sys
[ $? == 0 ] || exit 88
}
do_backup_www() {
$sc_backup_www
[ $? == 0 ] || exit 88
}
do_backup_sql() {
$sc_backup_sql
[ $? == 0 ] || exit 88
}
do_backup_all() {
do_backup_sys
sleep 5
do_backup_www
sleep 5
do_backup_sql
}
statusYaDisk() {
yandex-disk status > /dev/null 2>&1
RETVAL=$?
}
checkYaDisk() {
statusYaDisk
if [ $RETVAL != 0 ]; then
echo "Yandex disk is not started on $sname. Trying to start..." | mail -s "Yandex disk is not started on $sname" $email
yandex-disk start > /dev/null 2>&1
fi
statusYaDisk
if [ $RETVAL != 0 ]; then
echo "Failed to start Yandex disk on $sname." | mail -s "Failed to start Yandex disk on $sname" $email
fi
}
#####
case "$1" in
--backup-sys)
do_backup_sys
;;
--backup-www)
do_backup_www
;;
--backup-sql)
do_backup_sql
;;
--backup-all)
do_backup_all
;;
--check-yadisk)
checkYaDisk
;;
*)
echo "Usage: $0 --backup-sys | --backup-www | --backup-sql | --backup-all | --check-yadisk"
esac