diff --git a/src/collectd.c b/src/collectd.c
index 76c62d9c977f12fa145a7e34daf0f31f10720e86..e8081785564cacc572cb5161907d48166606aa7b 100644 (file)
--- a/src/collectd.c
+++ b/src/collectd.c
#include "multicast.h"
#include "plugin.h"
+#include "configfile.h"
#include "ping.h"
loop++;
}
+static void sigTermHandler (int signal)
+{
+ loop++;
+}
+
static int change_basedir (char *dir)
{
int dirlen = strlen (dir);
{
if (mkdir (dir, 0755) == -1)
{
- syslog (LOG_ERR, "mkdir: %s", strerror (errno));
+ syslog (LOG_ERR, "mkdir (%s): %s", dir, strerror (errno));
return (-1);
}
else if (chdir (dir) == -1)
{
- syslog (LOG_ERR, "chdir: %s", strerror (errno));
+ syslog (LOG_ERR, "chdir (%s): %s", dir, strerror (errno));
return (-1);
}
}
int main (int argc, char **argv)
{
- struct sigaction sigIntAction, sigChldAction;
+ struct sigaction sigIntAction;
+ struct sigaction sigTermAction;
+ struct sigaction sigChldAction;
char *configfile = CONFIGFILE;
char *plugindir = PLUGINDIR;
char *datadir = PKGLOCALSTATEDIR;
DBG_STARTFILE(logfile, "debug file opened.");
/*
- * Load plugins and change to output directory
- * Loading plugins is done first so relative paths work as expected..
+ * Read the config file. This will load any modules automagically.
*/
- if (plugin_load_all (plugindir) < 1)
+ plugin_set_dir (plugindir);
+
+ if (cf_read (configfile))
{
- fprintf (stderr, "Error: No plugins found.\n");
+ fprintf (stderr, "Error: Reading the config file failed!\n"
+ "Read the syslog for details.\n");
return (1);
}
+ /*
+ * Change directory. We do this _after_ reading the config and loading
+ * modules to relative paths work as expected.
+ */
if (change_basedir (datadir))
{
fprintf (stderr, "Error: Unable to change to directory `%s'.\n", datadir);
sigIntAction.sa_handler = sigIntHandler;
sigaction (SIGINT, &sigIntAction, NULL);
+ sigIntAction.sa_handler = sigTermHandler;
+ sigaction (SIGTERM, &sigTermAction, NULL);
+
sigChldAction.sa_handler = SIG_IGN;
sigaction (SIGCHLD, &sigChldAction, NULL);