mirror of
https://github.com/troglobit/finit.git
synced 2026-10-01 05:22:48 +07:00
Add support for global logfile max size and max num. rotated
# Max file size for each log file: 100 kiB, rotate max 4 copies:
# log => log.1 => log.2.gz => log.3.gz => log.4.gz
log size=100k count=4
Signed-off-by: Joachim Nilsson <troglobit@gmail.com>
This commit is contained in:
+24
@@ -36,11 +36,15 @@
|
||||
#include "service.h"
|
||||
#include "tty.h"
|
||||
#include "helpers.h"
|
||||
#include "util.h"
|
||||
|
||||
#define BOOTSTRAP (runlevel == 0)
|
||||
#define MATCH_CMD(l, c, x) \
|
||||
(!strncasecmp(l, c, strlen(c)) && (x = (l) + strlen(c)))
|
||||
|
||||
int logfile_size_max = 200000; /* 200 kB */
|
||||
int logfile_count_max = 5;
|
||||
|
||||
struct rlimit global_rlimit[RLIMIT_NLIMITS];
|
||||
|
||||
struct conf_change {
|
||||
@@ -383,6 +387,26 @@ static void parse_static(char *line)
|
||||
return;
|
||||
}
|
||||
|
||||
if (MATCH_CMD(line, "log ", x)) {
|
||||
char *tok;
|
||||
static int size = 200000, count = 5;
|
||||
|
||||
tok = strtok(x, ":= ");
|
||||
while (tok) {
|
||||
if (!strncmp(tok, "size", 4))
|
||||
size = strtobytes(strtok(NULL, ":= "));
|
||||
else if (!strncmp(tok, "count", 5))
|
||||
count = strtobytes(strtok(NULL, ":= "));
|
||||
|
||||
tok = strtok(NULL, ":= ");
|
||||
}
|
||||
|
||||
if (size > 0)
|
||||
logfile_size_max = size;
|
||||
if (count >= 0)
|
||||
logfile_count_max = count;
|
||||
}
|
||||
|
||||
if (MATCH_CMD(line, "shutdown ", x)) {
|
||||
if (sdown) free(sdown);
|
||||
sdown = strdup(strip_line(x));
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
|
||||
#include "svc.h"
|
||||
|
||||
extern int logfile_size_max;
|
||||
extern int logfile_count_max;
|
||||
|
||||
extern struct rlimit global_rlimit[];
|
||||
|
||||
int str2rlim(char *str);
|
||||
|
||||
+6
-1
@@ -266,7 +266,12 @@ static int service_start(svc_t *svc)
|
||||
sig_unblock();
|
||||
|
||||
if (svc->log.file[0] == '/') {
|
||||
execlp("logit", "logit", "-f", svc->log.file, NULL);
|
||||
char sz[20], num[3];
|
||||
|
||||
snprintf(sz, sizeof(sz), "%d", logfile_size_max);
|
||||
snprintf(num, sizeof(num), "%d", logfile_count_max);
|
||||
|
||||
execlp("logit", "logit", "-f", svc->log.file, "-n", sz, "-r", num, NULL);
|
||||
_exit(0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user