From e5a0cdcd196da8697a2a83f8122245d29c90247c Mon Sep 17 00:00:00 2001 From: liuhao Date: Sat, 12 Jan 2019 15:29:56 +0800 Subject: [PATCH 014/131] support rotate for container log file support rotate for container log file Signed-off-by: LiFeng --- src/lxc/confile.c | 3 +++ src/lxc/terminal.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/lxc/confile.c b/src/lxc/confile.c index cbef2e21..e7822115 100644 --- a/src/lxc/confile.c +++ b/src/lxc/confile.c @@ -1802,11 +1802,14 @@ static int set_config_console_rotate(const char *key, const char *value, if (lxc_safe_uint(value, &lxc_conf->console.log_rotate) < 0) return -1; + /* + * isulad: support rotate muti-files if (lxc_conf->console.log_rotate > 1) { ERROR("The \"lxc.console.rotate\" config key can only be set " "to 0 or 1"); return -1; } + */ return 0; } diff --git a/src/lxc/terminal.c b/src/lxc/terminal.c index 410f643c..3bb3a52a 100644 --- a/src/lxc/terminal.c +++ b/src/lxc/terminal.c @@ -229,6 +229,39 @@ static int lxc_terminal_truncate_log_file(struct lxc_terminal *terminal) return lxc_unpriv(ftruncate(terminal->log_fd, 0)); } +/* + * isuald: support mult-logfiles + * */ +static int lxc_terminal_rename_old_log_file(struct lxc_terminal *terminal) +{ + int ret; + size_t i; + char tmp[PATH_MAX] = {0}; + char *rename_fname = NULL; + + for (i = terminal->log_rotate - 1; i > 1; i--) { + ret = sprintf(tmp, "%s.%d", terminal->log_path, i); + if (ret < 0) + return -EFBIG; + if (rename_fname) + free(rename_fname); + rename_fname = strdup(tmp); + ret = sprintf(tmp, "%s.%d", terminal->log_path, (i - 1)); + if (ret < 0) { + free(rename_fname); + return -EFBIG; + } + ret = lxc_unpriv(rename(tmp, rename_fname)); + if (ret < 0 && errno != ENOENT) + return ret; + } + + if (rename_fname) + free(rename_fname); + + return 0; +} + static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) { int ret; @@ -242,6 +275,13 @@ static int lxc_terminal_rotate_log_file(struct lxc_terminal *terminal) if (terminal->log_fd < 0) return -EBADF; + /* isuald: rotate old log file first */ + ret = lxc_terminal_rename_old_log_file(terminal); + if(ret != 0) { + ERROR("Rename old log file failed"); + return ret; + } + len = strlen(terminal->log_path) + sizeof(".1"); tmp = alloca(len); -- 2.23.0