if [[ ! -d $BACKUPDIR ]] then mkdir -p "$BACKUPDIR" fi
if [[ ! -d $FTPTEMPDIR ]] then mkdir -p "$FTPTEMPDIR" fi
cd $BACKUPDIR for KEY in "${!FTPHOST[@]}"; do mount curlftpfs#ftp://${FTPHOST[$KEY]}/${FTPDIR[$KEY]}/ ${FTPTEMPDIR[$KEY]} -t fuse -o rw,noauto,default_permissions,user,disable_eprt,_netdev -o fsname=ftpbak if [[ $? -gt 0 ]];then echo "монтирование не удачно, выход." exit 1 fi echo "монтирование удачно"
#строим полный список файлов бекапа $FIND ${FTPTEMPDIR[$KEY]} -name "*.tar.gz" -type f | sort -n > $BACKUPDIR/1.txt touch $BACKUPDIR/2.txt
#удаляем из списка последние 3 бекапа cut_num() { let QUANTITY=$1-3 > /dev/null cat $BACKUPDIR/1.txt | grep $2 | sort -u | sed "${QUANTITY}"q } FILE_CONT=`cat $BACKUPDIR/1.txt| sort -u` SAVEIFS=$IFS IFS=' ' let COUNT=0 > /dev/null for CURRENT_FILE in ${FILE_CONT}; do CURRENT_USER=`echo ${CURRENT_FILE} | awk -F\/ '{print $4}'` if [ "${CURRENT_USER}" != "${LAST_USER}" -a -n "${LAST_USER}" ]; then CUTTED=`cut_num ${COUNT} ${LAST_USER}` > /dev/null for READY_STRING in ${CUTTED}; do echo ${READY_STRING} >> $BACKUPDIR/2.txt done let COUNT=0 > /dev/null fi let COUNT=${COUNT}+1 > /dev/null LAST_USER=${CURRENT_USER} done CUTTED=`cut_num ${COUNT} ${CURRENT_USER}` > /dev/null IFS=$SAVEIFS for READY_STRING in ${CUTTED}; do echo ${READY_STRING} >> $BACKUPDIR/2.txt done
DenisVS да спасибо! все работает - это я ошибся при копировании.
цель была смонтировать удаленный ftp через curlftpfs (на который льются бекапы) в локальную папку - и вывести список архивов в 1.txt , вывести список котор надо удалить в 2.txt и грохнуть
$CAT $BACKUPDIR/2.txt | xargs rm
mtime не походит - потому что если бекапы перестанут делаться по какой то причине - они будут все удалены - а тут полюбому останется 3
но если бекапов уже храниться 3 - то sed получает 0 и 2.txt пустой
/opt/test/1.sh: line 14: [: предполагается что будет использован аргумент sed: -e выражение #1, символ 2: недопустимое использование строки адреса 0 sed: -e выражение #1, символ 2: недопустимое использование строки адреса 0 rm: пропущен операнд По команде «rm --help» можно получить дополнительную информацию
хотя на следующий день будет 4 - и это неважно
а как вывести вывод этого скрипта в 2.txt - кроме как 1.sh > 2.txt ?
уже давно работаю официально - зарегистрировал ИП. плачу 6% с оборота и в пенсионный обязательные платежи. учет веду с https://www.moedelo.org - кому нужно могу дать скидку 80 % на оплату за год - пишите в личку
в итоге получился скриптик - заходит на ftp и ротирует бекапы -оставляет последние 3
touch ~/.netrc
chmod 600 ~/.netrc
cat ~/.netrc
machine 192.168.1.1
login user
password pass
#!/bin/bash
### yum/apt-get install curlftpfs
function die () {
echo >&2 "$@"
exit 1
}
XARGS="$(which xargs)"
CAT="$(which cat)"
SED="$(which sed)"
FIND="$(which find)"
BACKUPDIR=/opt/testbak
FTPHOST[0]="192.168.1.1"
#FTPUSER[0]="login"
#FTPPASS[0]="pass"
FTPDIR[0]="bak"
FTPTEMPDIR[0]="/opt/ftptempdir"
if [[ ! -d $BACKUPDIR ]]
then
mkdir -p "$BACKUPDIR"
fi
if [[ ! -d $FTPTEMPDIR ]]
then
mkdir -p "$FTPTEMPDIR"
fi
cd $BACKUPDIR
for KEY in "${!FTPHOST[@]}"; do
mount curlftpfs#ftp://${FTPHOST[$KEY]}/${FTPDIR[$KEY]}/ ${FTPTEMPDIR[$KEY]} -t fuse -o rw,noauto,default_permissions,user,disable_eprt,_netdev -o fsname=ftpbak
if [[ $? -gt 0 ]];then
echo "монтирование не удачно, выход."
exit 1
fi
echo "монтирование удачно"
#строим полный список файлов бекапа
$FIND ${FTPTEMPDIR[$KEY]} -name "*.tar.gz" -type f | sort -n > $BACKUPDIR/1.txt
touch $BACKUPDIR/2.txt
#удаляем из списка последние 3 бекапа
cut_num() {
let QUANTITY=$1-3 > /dev/null
cat $BACKUPDIR/1.txt | grep $2 | sort -u | sed "${QUANTITY}"q
}
FILE_CONT=`cat $BACKUPDIR/1.txt| sort -u`
SAVEIFS=$IFS
IFS='
'
let COUNT=0 > /dev/null
for CURRENT_FILE in ${FILE_CONT}; do
CURRENT_USER=`echo ${CURRENT_FILE} | awk -F\/ '{print $4}'`
if [ "${CURRENT_USER}" != "${LAST_USER}" -a -n "${LAST_USER}" ]; then
CUTTED=`cut_num ${COUNT} ${LAST_USER}` > /dev/null
for READY_STRING in ${CUTTED}; do
echo ${READY_STRING} >> $BACKUPDIR/2.txt
done
let COUNT=0 > /dev/null
fi
let COUNT=${COUNT}+1 > /dev/null
LAST_USER=${CURRENT_USER}
done
CUTTED=`cut_num ${COUNT} ${CURRENT_USER}` > /dev/null
IFS=$SAVEIFS
for READY_STRING in ${CUTTED}; do
echo ${READY_STRING} >> $BACKUPDIR/2.txt
done
#удаляем устаревшие бекапы
$CAT $BACKUPDIR/2.txt | $XARGS rm
rm -f $BACKUPDIR/1.txt
rm -f $BACKUPDIR/2.txt
# отмонтируем FTPTEMPDIR
umount ${FTPTEMPDIR[$KEY]}
done
DenisVS да спасибо! все работает - это я ошибся при копировании.
цель была смонтировать удаленный ftp через curlftpfs (на который льются бекапы) в локальную папку - и вывести список архивов в 1.txt , вывести список котор надо удалить в 2.txt и грохнуть
mtime не походит - потому что если бекапы перестанут делаться по какой то причине - они будут все удалены - а тут полюбому останется 3
но если бекапов уже храниться 3 - то sed получает 0 и 2.txt пустой
/opt/test/1.sh: line 14: [: предполагается что будет использован аргумент
sed: -e выражение #1, символ 2: недопустимое использование строки адреса 0
sed: -e выражение #1, символ 2: недопустимое использование строки адреса 0
rm: пропущен операнд
По команде «rm --help» можно получить дополнительную информацию
хотя на следующий день будет 4 - и это неважно
а как вывести вывод этого скрипта в 2.txt - кроме как 1.sh > 2.txt ?
не работает - падает
sed: неверный ключ — «2»
а мануал почитать ? https://phpclub.ru/manrus/cont/include.html
http://ask.xmodulo.com/mount-lvm-partition-linux.html
вот стандартное разбиение hetzner raid 10 из 4 дисков - причем boot и swap как raid1 из 4
Personalities : [raid1] [raid10]
md2 : active raid10 sdd3[3] sdc3[2] sdb3[1] sda3[4]
11651572736 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
bitmap: 10/87 pages [40KB], 65536KB chunk
md1 : active raid1 sda2[4] sdc2[2] sdb2[1] sdd2[3]
1047552 blocks super 1.2 [4/4] [UUUU]
md0 : active raid1 sdc1[2] sda1[4] sdd1[3] sdb1[1]
33521664 blocks super 1.2 [4/4] [UUUU]
в биос еще надо поставить загрузочными первыми ssd
попробуй добавить
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_connect_timeout 75;
proxy_send_timeout 1800;
proxy_read_timeout 1800;
server_names_hash_bucket_size 512;
server_names_hash_max_size 1024;
large_client_header_buffers 4 81920;
sub_filter_last_modified on;
затраты: сервер с кучей ip и доменов + powermta ну и затраты на настройку и рассылку
точно от 1000$
можно с другого сервера через nfs подмонтировать папку в крайнем случае
уже давно работаю официально - зарегистрировал ИП. плачу 6% с оборота и в пенсионный обязательные платежи. учет веду с https://www.moedelo.org - кому нужно могу дать скидку 80 % на оплату за год - пишите в личку