feat(database-dump-via-docker-sock): 增加对EXEC_SHELL变量的支持以指定执行shell
This commit is contained in:
@@ -38,6 +38,7 @@ MYSQL_USER="root"
|
|||||||
MYSQL_PASSWORD=""
|
MYSQL_PASSWORD=""
|
||||||
MYSQL_PASSWORD_SET=0
|
MYSQL_PASSWORD_SET=0
|
||||||
EXEC_USER_OVERRIDE=""
|
EXEC_USER_OVERRIDE=""
|
||||||
|
EXEC_SHELL="sh"
|
||||||
|
|
||||||
detect_db_type_from_name() {
|
detect_db_type_from_name() {
|
||||||
name_lower=$(printf '%s' "$1" | tr 'A-Z' 'a-z')
|
name_lower=$(printf '%s' "$1" | tr 'A-Z' 'a-z')
|
||||||
@@ -96,6 +97,10 @@ docker_exec() {
|
|||||||
set -- "$@" --user="$exec_user"
|
set -- "$@" --user="$exec_user"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -n "${EXEC_SHELL:-}" ]; then
|
||||||
|
set -- "$@" --shell="$EXEC_SHELL"
|
||||||
|
fi
|
||||||
|
|
||||||
curl -fsSL "https://Git.1-H.CC/Scripts/Linux/raw/branch/main/docker-exec-via-sock.sh" | sh -s -- "$@"
|
curl -fsSL "https://Git.1-H.CC/Scripts/Linux/raw/branch/main/docker-exec-via-sock.sh" | sh -s -- "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,6 +236,7 @@ case $DB_TYPE in
|
|||||||
BACKUP_EXTENSION=".sql.zst"
|
BACKUP_EXTENSION=".sql.zst"
|
||||||
DUMP_CMD="pg_dumpall --username=\"\${POSTGRES_USER:-postgres}\" --clean"
|
DUMP_CMD="pg_dumpall --username=\"\${POSTGRES_USER:-postgres}\" --clean"
|
||||||
COMPRESS_CMD="zstd"
|
COMPRESS_CMD="zstd"
|
||||||
|
EXEC_SHELL="bash"
|
||||||
;;
|
;;
|
||||||
mysql)
|
mysql)
|
||||||
BACKUP_EXTENSION=".sql.zst"
|
BACKUP_EXTENSION=".sql.zst"
|
||||||
@@ -241,12 +247,14 @@ case $DB_TYPE in
|
|||||||
DUMP_CMD="MYSQL_PWD=\"${mysql_password_escaped}\" $DUMP_CMD"
|
DUMP_CMD="MYSQL_PWD=\"${mysql_password_escaped}\" $DUMP_CMD"
|
||||||
fi
|
fi
|
||||||
COMPRESS_CMD="zstd"
|
COMPRESS_CMD="zstd"
|
||||||
|
EXEC_SHELL="sh"
|
||||||
;;
|
;;
|
||||||
kingbase)
|
kingbase)
|
||||||
BACKUP_EXTENSION=".sql.zst"
|
BACKUP_EXTENSION=".sql.zst"
|
||||||
DUMP_CMD="sys_dumpall --clean --username=\"\${DB_USER:-kingbase}\""
|
DUMP_CMD="sys_dumpall --clean --username=\"\${DB_USER:-kingbase}\""
|
||||||
COMPRESS_CMD="zstd"
|
COMPRESS_CMD="zstd"
|
||||||
EXEC_USER_DEFAULT="root"
|
EXEC_USER_DEFAULT="root"
|
||||||
|
EXEC_SHELL="sh"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
printf 'Unsupported database type: %s\n' "$DB_TYPE" >&2
|
printf 'Unsupported database type: %s\n' "$DB_TYPE" >&2
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ log_stream() {
|
|||||||
|
|
||||||
print_usage() {
|
print_usage() {
|
||||||
cat <<EOF >&2
|
cat <<EOF >&2
|
||||||
Usage: $0 [--socket=PATH] [--api-version=VERSION] --container=NAME --cmd=COMMAND [--user=NAME]
|
Usage: $0 [--socket=PATH] [--api-version=VERSION] --container=NAME --cmd=COMMAND [--user=NAME] [--shell=SHELL]
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--socket=PATH Docker Engine unix socket path (default: /var/run/docker.sock)
|
--socket=PATH Docker Engine unix socket path (default: /var/run/docker.sock)
|
||||||
@@ -29,7 +29,7 @@ Options:
|
|||||||
--container=NAME Container name to execute command in
|
--container=NAME Container name to execute command in
|
||||||
--cmd=COMMAND Command to execute in the container
|
--cmd=COMMAND Command to execute in the container
|
||||||
--user=NAME Run command as the specified user (default: container default user)
|
--user=NAME Run command as the specified user (default: container default user)
|
||||||
--shell=SHELL Shell to use (default: sh) 暂未实现
|
--shell=SHELL Shell to use (default: sh)
|
||||||
--help Show this help message
|
--help Show this help message
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
@@ -40,6 +40,7 @@ CONTAINER_NAME=""
|
|||||||
CMD_TO_EXEC=""
|
CMD_TO_EXEC=""
|
||||||
EXEC_USER=""
|
EXEC_USER=""
|
||||||
DOCKER_LAST_RESPONSE=""
|
DOCKER_LAST_RESPONSE=""
|
||||||
|
EXEC_SHELL="sh"
|
||||||
|
|
||||||
require_command() {
|
require_command() {
|
||||||
if ! command -v "$1" >/dev/null 2>&1; then
|
if ! command -v "$1" >/dev/null 2>&1; then
|
||||||
@@ -57,12 +58,12 @@ missing_value() {
|
|||||||
docker_exec_create() {
|
docker_exec_create() {
|
||||||
docker_exec_create_desc=$1
|
docker_exec_create_desc=$1
|
||||||
docker_exec_create_cmd=$2
|
docker_exec_create_cmd=$2
|
||||||
docker_exec_create_payload=$(jq -n --arg cmd "$docker_exec_create_cmd" --arg user "$EXEC_USER" '{
|
docker_exec_create_payload=$(jq -n --arg cmd "$docker_exec_create_cmd" --arg user "$EXEC_USER" --arg shell "$EXEC_SHELL" '{
|
||||||
AttachStdin: false,
|
AttachStdin: false,
|
||||||
AttachStdout: true,
|
AttachStdout: true,
|
||||||
AttachStderr: true,
|
AttachStderr: true,
|
||||||
Tty: true,
|
Tty: true,
|
||||||
Cmd: ["sh", "-c", $cmd]
|
Cmd: [$shell, "-c", $cmd]
|
||||||
} | if ($user | length) > 0 then .User = $user else . end')
|
} | if ($user | length) > 0 then .User = $user else . end')
|
||||||
|
|
||||||
DOCKER_LAST_RESPONSE=$(curl --silent --show-error --unix-socket "$DOCKER_SOCKET" \
|
DOCKER_LAST_RESPONSE=$(curl --silent --show-error --unix-socket "$DOCKER_SOCKET" \
|
||||||
@@ -151,6 +152,14 @@ while [ "$#" -gt 0 ]; do
|
|||||||
shift
|
shift
|
||||||
EXEC_USER="$1"
|
EXEC_USER="$1"
|
||||||
;;
|
;;
|
||||||
|
--shell=*)
|
||||||
|
EXEC_SHELL="${1#*=}"
|
||||||
|
;;
|
||||||
|
--shell)
|
||||||
|
if [ "$#" -lt 2 ]; then missing_value '--shell'; fi
|
||||||
|
shift
|
||||||
|
EXEC_SHELL="$1"
|
||||||
|
;;
|
||||||
--help)
|
--help)
|
||||||
print_usage
|
print_usage
|
||||||
exit 0
|
exit 0
|
||||||
@@ -182,6 +191,10 @@ if [ -z "$DOCKER_SOCKET" ] || [ -z "$DOCKER_API_VERSION" ] || [ -z "$CONTAINER_N
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -z "$EXEC_SHELL" ]; then
|
||||||
|
EXEC_SHELL="sh"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ ! -S "$DOCKER_SOCKET" ]; then
|
if [ ! -S "$DOCKER_SOCKET" ]; then
|
||||||
log "docker socket $DOCKER_SOCKET not found"
|
log "docker socket $DOCKER_SOCKET not found"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user