Нет никакого вреда в запуске dd во время работы сервера. Целостность резервной копии в основном зависит от того, что делает сервер и какие разделы размещены на нем.
В основном статический контент не имеет никаких проблем, за исключением некоторых проблем с разделами БД или журналов. Я бы рекомендовал останавливать серверы БД на разделах БД.
Если вы также выполняете резервное копирование файловых систем на основе транзакций, резервные копии должны быть восстановлены в кратчайшие сроки.
dd можно было бы использовать в основном для резервного копирования некоторых серверов, однако вам также потребуются резервные копии файлов, сделанные на более высоком уровне.
dd будет работать достаточно хорошо в качестве альтернативы клонированию , если сервер загружается с альтернативного носителя и вообще не выполняется никакой активности.
Как сказано в предыдущем посте, если у вас нет особой необходимости использовать dd, есть лучшие альтернативы, бесплатные и коммерческие.
Вот некоторые из них:
Clonezilla
Systemimager
дамп / восстановление
Вы также можете создать псевдоним деактивации (, если этого достаточно, )который имеет более высокий приоритет, чем функция. В том, что вы могли запустить команду раньше, но не так просто запустить ее после.
alias deactivate='before; deactivate'
Или просто (гораздо лучше )создать функцию с более простым именем:
deact(){ [[ $somevar == true ]] && deactivate
[[ $othervar == admin ]] && sudo deactivate
}
Или все, что вы хотите реализовать. Да, это будет работать только там, где это определено. Это **не заменяет слово deactivate
и не работает для других пользователей.
Единственный способ сделать это — создать исполняемую программу с именем deactivate
, но она имеет более низкий приоритет, чем псевдонимы и функции. Оба должны быть определены -.
Хотя этот ответ напрямую не относится к 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
документы .
Полный список хуков см. в По -Пользовательской настройке .
Если ваша оболочка 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
}
Это, конечно, довольно хрупкий.