Исправление функции bash

Нет никакого вреда в запуске dd во время работы сервера. Целостность резервной копии в основном зависит от того, что делает сервер и какие разделы размещены на нем.

В основном статический контент не имеет никаких проблем, за исключением некоторых проблем с разделами БД или журналов. Я бы рекомендовал останавливать серверы БД на разделах БД.

Если вы также выполняете резервное копирование файловых систем на основе транзакций, резервные копии должны быть восстановлены в кратчайшие сроки.

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

dd будет работать достаточно хорошо в качестве альтернативы клонированию , если сервер загружается с альтернативного носителя и вообще не выполняется никакой активности.

Как сказано в предыдущем посте, если у вас нет особой необходимости использовать dd, есть лучшие альтернативы, бесплатные и коммерческие.

Вот некоторые из них:

Clonezilla
Systemimager
дамп / восстановление

0
11.10.2018, 14:09
3 ответа

Вы также можете создать псевдоним деактивации (, если этого достаточно, )который имеет более высокий приоритет, чем функция. В том, что вы могли запустить команду раньше, но не так просто запустить ее после.

alias deactivate='before; deactivate'

Или просто (гораздо лучше )создать функцию с более простым именем:

deact(){ [[ $somevar == true ]] && deactivate
         [[ $othervar == admin ]] && sudo deactivate
       }

Или все, что вы хотите реализовать. Да, это будет работать только там, где это определено. Это **не заменяет слово deactivateи не работает для других пользователей.

Единственный способ сделать это — создать исполняемую программу с именем deactivate, но она имеет более низкий приоритет, чем псевдонимы и функции. Оба должны быть определены -.

1
28.01.2020, 02:31

Хотя этот ответ напрямую не относится к virtualenvиспользованию -, как насчет использования virtualenvwrapper? Это в основном virtualenvна стероидах, заботясь об управлении envs. После установки вы получаете набор дополнительных команд:

  • workonперечисляет все доступные окружения при вызове без аргументов и активирует окружение при вызове с именем окружения в качестве аргумента, например, workon myenvактивирует окружение myenv;
  • mkvirtualenv myenvсоздает новую среду myenv;
  • rmvirtualenv myenvудаляет его.

Но есть еще кое-что-virtualenvwrapperопределяет набор полезных хуков, где вы можете реализовать свою собственную логику для настройки envs, например:

  • premkvirtualenvвыполняется, когда окружение создано, но еще не активировано;
  • postmkvirtualenvвыполняется при создании и активации окружения;
  • preactivateвыполняется при активации env;
  • postactivateвыполняется при активации окружения;
  • predeactivateвыполняется при срабатывании деактивации окружения;
  • postdeactivateвыполняется, когда env была деактивирована;

и многие другие. Например, у меня есть хук postmkvirtualenv, который устанавливает ipythonв новую среду :

.
$ cat $VIRTUALENVWRAPPER_HOOK_DIR/postmkvirtualenv
#!/bin/bash
# This hook is sourced after a new virtualenv is activated.

env=$(basename "$VIRTUAL_ENV")
logger -s -t "($env)" "installing ipython..."
"$VIRTUAL_ENV/bin/pip" install ipython --quiet

Чтобы определить дополнительную логику для деактивации окружения, вам придется написать собственный сценарий bash и поместить его содержимое либо в $VIRTUALENVWRAPPER_HOOK_DIR/predeactivate(, если вам нужно запустить свои вещи, пока окружение все еще активировано ), либо $VIRTUALENVWRAPPER_HOOK_DIR/postdeactivate(. ] если вам нужно деактивировать env для запуска пользовательского кода ).

Для справки:virtualenvwrapperдокументы .

Полный список хуков см. в По -Пользовательской настройке .

0
28.01.2020, 02:31

Если ваша оболочка bash,zshили ksh93вы можете воспользоваться встроенной функцией typeset -f, которая показывает источник функции:

# usage patch_func funcname before after
function patch_func {
        typeset nl=$'\n' lb={ src=`typeset -f "$1"` before=$2 after=$3
        src="${src/$lb/$lb$nl    $before$nl}"
        src="${src%\}*}$nl    $after$nl}"
        eval "$src"
}

Пример:

$ deactivate(){ echo -n "{$0}"; for i; do echo -n " {$i}"; done; echo; }
$ patch_func deactivate 'echo before' 'echo after'
$ typeset -f deactivate
deactivate ()
{
    echo before;
    echo -n "{$0}";
    for i in "$@";
    do
        echo -n " {$i}";
    done;
    echo;
    echo after
}

Это, конечно, довольно хрупкий.

1
28.01.2020, 02:31

Теги

Похожие вопросы