IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Веб-программирование (https://www.imho.ws/forumdisplay.php?f=29)
-   -   Бэкап папки с определённым интервалом. (https://www.imho.ws/showthread.php?t=99440)

Dr.Dre 04.02.2006 05:47

Бэкап папки с определённым интервалом.
 
Есть база пользователей чата она хранится в папке bd2 нужно написать скрипт который бы ежедневно копировал бы эту папку в определённую деректорию. Так как я в программировании не особо, прошу вас подсказать с чего начать бы этот скрипт или может какие нибудь наброски.

Псих 04.02.2006 06:02

у тебя хостинг вдс?
можно написать простейший скрипт на баше и запускать его с помощью at
В юниксах не силен, но это выглядит приблизительно так:
cd /dir/directory/
cp * /home/user/bd2
в консоли пиши
at 00.00
at> /путь к скрипту/

Либо наваять скриптик на php\perl с теме же командами через функцию system() - это пхп.
Но тада ее запускать надо будет по нажатию кнопки на сайте или в ините прописывать где-то..
Да и system() может быть отключена.

+ есть еще Cron, он сейчас со всеми хостингами идет
В общем пиши!

Dr.Dre 04.02.2006 08:26

Цитата:

Псих:
у тебя хостинг вдс?
Что такое вдс?

Цитата:

Псих:
Либо наваять скриптик на php\perl с теме же командами через функцию system() - это пхп.
Но тада ее запускать надо будет по нажатию кнопки на сайте или в ините прописывать где-то..
Ага ну это то я знаю как раз, в том то и суть была как именно этот скрип правильно написать :)

Цитата:

+ есть еще Cron, он сейчас со всеми хостингами идет
В общем пиши!
Вот это кстати думаю самое подходящее... Написать код что-то типа того что ты привёл:
Цитата:

cd /dir/directory/
cp * /home/user/bd2
в консоли пиши
at 00.00
at> /путь к скрипту/
Потом в кроне поставить запуск ежедневно и повесить туда этот файл, но суть то в том, как правильно этот файл написать, нужно чтоб он копировал эту папку давал ей постоянно новое имя и старые папки удалял. Я суть то всю понимаю, а как это написать вот, не могу, языка не знаю.
Цитата:

Псих:
запускать его с помощью at
P.s. что такое at ?

Ghost 04.02.2006 09:05

Dr.Dre
Цитата:

Сообщение от Unix Man Pages
НАЗВАНИЕ
at - планирование выполнения команд в определенное время

СИНТАКСИС

at время [дата] [+задержка]
at -r идентификатор_задания ...
at -l [идентификатор_задания ...]

ОПИСАНИЕ
Команда at в первом из приведенных вариантов читает со стандартного ввода задание, выполнение которого планируется на указанное время. Смысл опций двух других вариантов команды at таков: -r Удалить задания, запланированные ранее с помощью at или batch(1), по идентификаторам_заданий. Идентификаторы сообщаются командами at и batch. Их можно узнать также по команде at -l. Только суперпользователь может удалять чужие задания.
-l Вывести информацию о запланированных заданиях по идентификаторам_заданий. Если идентификаторы не указаны, выдается список всех заданий, запланированных пользователем и еще не выполненных.


Если стандартный вывод и стандартный протокол не переназначены, то весь вывод запланированных команд пересылается пользователю по почте. Переменные окружения shell'а, текущий каталог, маска режима создания файлов и максимальный размер файлов [см. umask(1) и ulimit(1)] сохраняются, то есть задание выполняется в том же окружении, том же каталоге и т.д. Дескрипторы открытых файлов, прерывания и приоритет теряются.

Пользователю разрешается выполнять команду at только при условии, что его имя встречается в файле /usr/lib/ cron/at.allow. Если этого файла не существует, то проверяется файл /usr/lib/cron/at.deny, для того чтобы узнать, не запрещен ли пользователю доступ к at. Если оба файла отсутствуют, то только суперпользователю разрешено планировать выполнение задания. Если файл at.deny пуст, а at.allow отсутствует, то эти действия могут выполнять все. Файлы at.allow и at.deny содержат по одному имени в строке. Модифицировать эти файлы может только суперпользователь.

Время может быть указано 1, 2 или 4 цифрами. Если время состоит из одной или двух цифр, то оно обозначает часы; четырехзначное число обозначает часы и минуты. Время также может быть задано как два числа, разделенные двоеточием, что понимается как часы:минуты. Могут быть добавлены суффиксы am (до полудня) или pm (после полудня), в противном случае часы указываются от 0 до 23. Если необходимо указать время по Гринвичу, то можно добавить суффикс zulu. Распознаются специальные имена noon (полдень), midnight (полночь), now (сейчас), и next (следующий).

Дата может быть указана двумя способами: во-первых, в виде названия месяца, за которым следует число [и, может быть, год (через запятую)], а во-вторых, как день недели (полностью или сокращенный до 3 букв). Распознается два специальных "дня" today (сегодня) и tomorrow (завтра). Если дата не задана, то предполагается сегодняшняя дата, если указанное время больше, чем текущее, и завтрашняя, если меньше. Если заданный месяц меньше, чем текущий и год явно не задан, то предполагается, что имеется в виду следующий год.

Дополнительная задержка представляет собой просто число, за которым следует одно из следующих слов: minutes (минуты), hours (часы), days (дни), weeks (недели), months (месяцы), или years (годы). Можно указывать единицу измерения и без числа, например at now +minutes.

Далее приведены примеры корректных команд:

at 0815am Jan 16
at 8:15am Jan 16
at now +1 day
at 5 pm Friday

Команда at выдает идентификатор задания и запланированное время его выполнения в стандартный протокол.

ПРИМЕР
Чтобы задание могло снова себя запланировать, следует вызвать at из shell-файла (назовем его sfile), включив в файл текст такого вида:

echo "sh sfile" | at 1900 thursday next week

ФАЙЛЫ

/usr/lib/cron
Основной каталог команд, связанных со временем.
/usr/lib/cron/at.allow
Список пользователей, которым разрешено выполнять команды at и batch.
/usr/lib/cron/at.deny
Список пользователей, которым запрещено выполнять команды at и batch.
/usr/lib/cron/queuedefs
Информация о планировании.
/usr/spool/cron/atjobs
Область накопления вывода.


Naked 04.02.2006 23:35

Цитата:

Dr.Dre:
Что такое вдс?
Виртуальный выделенный сервер.
Цитата:

Виртуальный выделенный сервер по возможностям аналогичен физическому серверу:
-VDS (VPS) имеет свои процессы, пользователей и предоставляет полный root-доступ
-VDS (VPS) имеет собственные IP-адреса, порты, правила фильтрования и таблицы маршрутизации
-VDS (VPS) может иметь собственные конфигурационные файлы и программные приложения
-есть возможность создавать собственные версии системных библиотек или изменять существующие
-владелец VDS (VPS) может изменять любые файлы, включая файлы в головной и других служебных директориях, а также устанавливать/настраивать/изменять любое доступное ПО (пример: на одном сервере можно запускать VDS (VPS) с разными дистрибутивами операционных систем)
-VDS (VPS) имеет минимальные гарантированные ресурсы RAM, CPU, и возможность использовать все остальные ресурсы сервера
я бы написал скрипт на perl, а потом в crontab'e его вызывал когда нужно...
crontab -l - выводит список всех задач
crontab -e - редактирование, ставишь курсор куда нужно, потом жмешь i, чтобы печатать, потом печатаешь по аналогии с верхними строчками (первое - минуты, потом часы, потом дни и т.д....), если нужно каждые 15 минут, то так: (*/15 * * * * путь к скрипту).
А сам скрипт:
Цитата:

<?php
system ("cd /dir/directory/");
system ("cp * /home/user/bd2");
?>
а в crontabe добавляешь:
0 0 * * * * * php "путь к скрипту"
У меня на сервере нужно не php писать, а что-то другое (сейчас не помню), просто набери php а потом tab нажми и он покажет, что нужно писать:)
Если что не так - исправьте, в скрипте мог и баг сделать ;)

Dr.Dre 05.02.2006 03:47

Ну ясно будем пробовать. У меня к сожаления сервер не выделенный, у меня виртуальный хостинг.

Makc666 05.02.2006 04:43

Цитата:

Dr.Dre:
Ну ясно будем пробовать. У меня к сожаления сервер не выделенный, у меня виртуальный хостинг.
Ты доступ к командной строке сервера имеешь?
Или к cron?

Dr.Dre 05.02.2006 06:36

Крон есть через Cpanel есть шелл, но не рутовый.

Stasik 05.02.2006 18:36

возьми просто скрипт nackeda

<?php
system ("cd /dir/directory/");
system ("cp * /home/user/bd2");
?>

и в крон
/usr/bin/php /path/to/script.php | &> /dev/null

и проблем нет

Dr.Dre 05.02.2006 18:52

Ага, это я уже понял, ещё нужно несколько усовершенствовать этот скрипт, а то будет то он копировать каждый день нужную папку, а имя то у неё одно, нужно как то сделать чтоб он ещё переименовывал её с помощью функции date т.е. дату вставлял в имя и чтоб ещё удалял старые папки, например сканировал если в директории папок уже более 10 то удалить последнюю, вот как бы это реализовать... :)

Naked 05.02.2006 23:13

вот скрипт:
Цитата:

<?php
function bubblesort($files, $len){ //Функция сортировки директорий, на вход даем массив имен, на выходе - самое старое (или новое, сам посмотришь) название директории (имеется ввиду, что название директории в формате Год-месяц-день)
for ($i=0; $i<=$len; $i++){
for ($j=0; $j<=$len; $j++){
if ($files[$i]<$files[$j]){
$temp = $files[$i]; $files[$i] = $files[$j];$files[$j] = $temp;
}
}
}
return $files[0];
}

if ($handle=opendir('путь к директории где будут хранится бэкапы')){//открываем нашу директорию
$p = 0;
while (false !== ($file = readdir($handle))){//считываем все имена директорий (и файлов, но думаю их там не будет...)
$files[$p] = $file;
$p++;
}
if ($p>=10){
$delfile = bubblesort ($files, $p);//запускаем сортировку имен директорий
rmdir ($delfile);//удаляем самую старую (если их ($p) больше 10)
}
$newdir = date ("Y-m-d");//создаем имя директории в указанном выше формате
mkdir($newdir);//создаем эту директорию
system ("cd /dir/directory/".$newdir);//открываем эту директорию
system ("cp * /home/user/bd2");//копируем туда все:)
}
?>
Вроде так, если нигде не ошибся...

Dr.Dre 06.02.2006 04:46

Ага ну спасибо большое! Буду пробовать, если что уже сам подредактирую что понадобится.

Dr.Dre 13.02.2006 10:07

Решилось тем что с помощью Habbitus'a создали скрипт на баше. Всё работает ок.

helldomain 26.02.2006 08:03

Xm, cp * eto ne ekonomno (s moei tochki zreniya). Suschestwuet takaya poleznaya wesch kak rsync. Naprimer s pomoschju rsync ejednewno proizwoditsya backup 40 serverow cherez soedinenie SSH. Obschij objem informacii na serverah kolebletsya ot neskolkih gb do 8tb.

Hubbitus 26.02.2006 12:13

helldomain, возможно, только если бакап локальный, на том же сервере, на том же винте и аккаунте, то cp самое то - быстро и просто. А старые бакапы (ну скажем старее 3 дней) можно просто удалять.

InsaneX 26.02.2006 23:07

+1 za rsync.
komu sh scripta budet malo, rekomenduyu http://www.rfxnetworks.com/sysbk.php

backup'it luboy soft, apache/mysql/bind zoni i mnogoe drugoe, est remote incremented backups


Часовой пояс GMT +4, время: 08:13.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.