}
init_database() {
- local lib="$(vnstat_option DatabaseDir)"
+ local lib database_count
- local database_count="$(ls "$lib" 2>/dev/null | wc -l)"
+ lib="$(vnstat_option DatabaseDir)"
+ [ -n "$lib" ] || lib="/var/lib/vnstat"
+
+ database_count="$(ls "$lib" 2>/dev/null | wc -l)"
# only init database when folder is empty, as it would prevent import of legacy databases
if [ "$database_count" -eq "0" ]; then
/usr/sbin/vnstatd --initdb >/dev/null
+ else
+ # if vnstat.db doesn't exist, there are legacy databases to import
+ [ ! -f "$lib/vnstat.db" ] && echo -n "1"
fi
}
}
config_list_foreach "$cfg" interface init_iface
-
- return 1
}
start_service() {
- init_database
+ local options needs_import
+
+ needs_import="$(init_database)"
+
+ # --noadd would prevent import of legacy databases
+ [ -z "$needs_import" ] && options="--noadd --noexit"
config_load vnstat
config_foreach init_ifaces vnstat
procd_open_instance
procd_set_param stdout 1
procd_set_param stderr 1
- procd_set_param command /usr/sbin/vnstatd --nodaemon
+ procd_set_param command /usr/sbin/vnstatd --nodaemon $options
procd_set_param file /etc/vnstat.conf
procd_set_param respawn
procd_close_instance
--- /dev/null
+--- a/src/daemon.c
++++ b/src/daemon.c
+@@ -252,6 +252,7 @@ void initdstate(DSTATE *s)
+ s->sync = 0;
+ s->forcesave = 0;
+ s->noadd = 0;
++ s->noexit = 0;
+ s->initdb = 0;
+ s->iflisthash = 0;
+ s->cfgfile[0] = '\0';
+@@ -282,6 +283,9 @@ void preparedatabase(DSTATE *s)
+ }
+
+ if (s->noadd) {
++ if (s->noexit) {
++ return;
++ }
+ printf("No interfaces found in database, exiting.\n");
+ exit(EXIT_FAILURE);
+ }
+@@ -300,6 +304,9 @@ void preparedatabase(DSTATE *s)
+ }
+
+ if (!addinterfaces(s) && s->dbifcount == 0) {
++ if (s->noexit) {
++ return;
++ }
+ printf("Nothing to do, exiting.\n");
+ exit(EXIT_FAILURE);
+ }
+--- a/src/daemon.h
++++ b/src/daemon.h
+@@ -4,7 +4,7 @@
+ typedef struct {
+ int updateinterval, saveinterval;
+ short running, dodbsave, rundaemon;
+- short dbsaved, showhelp, sync, forcesave, noadd, initdb;
++ short dbsaved, showhelp, sync, forcesave, noadd, noexit, initdb;
+ short bootdetected, cleanuphour, dbretrycount;
+ uint32_t iflisthash;
+ uint64_t dbifcount;
+--- a/src/vnstatd.c
++++ b/src/vnstatd.c
+@@ -248,6 +248,7 @@ void showhelp(void)
+ printf(" --config <config file> select used config file\n");
+ printf(" --noadd prevent startup if database has no interfaces\n");
+ printf(" --alwaysadd [mode] automatically start monitoring all new interfaces\n");
++ printf(" --noexit keep running even when database has no interfaces\n");
+ printf(" --initdb create empty database and exit\n\n");
+
+ printf("See also \"man vnstatd\".\n");
+@@ -319,6 +320,8 @@ void parseargs(DSTATE *s, int argc, char
+ } else {
+ cfg.alwaysadd = 1;
+ }
++ } else if (strcmp(argv[currentarg], "--noexit") == 0) {
++ s->noexit = 1;
+ } else if (strcmp(argv[currentarg], "--initdb") == 0) {
+ s->initdb = 1;
+ s->showhelp = 0;