0b850eb
diff -up nut-2.7.1/clients/upsmon.c.foreground nut-2.7.1/clients/upsmon.c
0b850eb
--- nut-2.7.1/clients/upsmon.c.foreground	2013-07-26 21:41:10.000000000 +0200
0b850eb
+++ nut-2.7.1/clients/upsmon.c	2014-02-27 11:39:58.158784578 +0100
0b850eb
@@ -1645,6 +1645,7 @@ static void help(const char *progname)
324dacc
 	printf("		 - reload: reread configuration\n");
324dacc
 	printf("		 - stop: stop monitoring and exit\n");
324dacc
 	printf("  -D		raise debugging level\n");
324dacc
+	printf("  -F		run in foreground, do not daemonize\n");
324dacc
 	printf("  -h		display this help\n");
324dacc
 	printf("  -K		checks POWERDOWNFLAG, sets exit code to 0 if set\n");
324dacc
 	printf("  -p		always run privileged (disable privileged parent)\n");
0b850eb
@@ -1859,7 +1860,7 @@ static void check_parent(void)
324dacc
 int main(int argc, char *argv[])  
324dacc
 {
324dacc
 	const char	*prog = xbasename(argv[0]);
324dacc
-	int	i, cmd = 0, checking_flag = 0;
324dacc
+	int	i, cmd = 0, checking_flag = 0, foreground = 0;
324dacc
 
324dacc
 	printf("Network UPS Tools %s %s\n", prog, UPS_VERSION);
324dacc
 
0b850eb
@@ -1870,7 +1871,7 @@ int main(int argc, char *argv[])
324dacc
 
324dacc
 	run_as_user = xstrdup(RUN_AS_USER);
324dacc
 
324dacc
-	while ((i = getopt(argc, argv, "+Dhic:f:pu:VK46")) != -1) {
324dacc
+	while ((i = getopt(argc, argv, "+DFhic:f:pu:VK46")) != -1) {
324dacc
 		switch (i) {
324dacc
 			case 'c':
324dacc
 				if (!strncmp(optarg, "fsd", strlen(optarg)))
0b850eb
@@ -1887,6 +1888,9 @@ int main(int argc, char *argv[])
324dacc
 			case 'D':
324dacc
 				nut_debug_level++;
324dacc
 				break;
324dacc
+			case 'F':
324dacc
+				foreground = 1;
324dacc
+				break;
324dacc
 			case 'f':
324dacc
 				free(configfile);
324dacc
 				configfile = xstrdup(optarg);
0b850eb
@@ -1962,9 +1966,9 @@ int main(int argc, char *argv[])
324dacc
 		exit(EXIT_FAILURE);
324dacc
 	}
324dacc
 
324dacc
-	if (nut_debug_level < 1) {
324dacc
+	if (!foreground && nut_debug_level < 1) {
324dacc
 		background();
324dacc
-	} else {
324dacc
+	} else if (nut_debug_level >= 1) {
324dacc
 		upsdebugx(1, "debug level is '%d'", nut_debug_level);
324dacc
 	}
324dacc
 	
0b850eb
diff -up nut-2.7.1/scripts/systemd/nut-monitor.service.in.foreground nut-2.7.1/scripts/systemd/nut-monitor.service.in
0b850eb
--- nut-2.7.1/scripts/systemd/nut-monitor.service.in.foreground	2014-02-27 11:39:58.141784438 +0100
0b850eb
+++ nut-2.7.1/scripts/systemd/nut-monitor.service.in	2014-02-27 11:39:58.152784529 +0100
324dacc
@@ -4,9 +4,8 @@ After=local-fs.target network.target nut
324dacc
 
324dacc
 [Service]
0768358
 ExecStartPre=-/usr/bin/systemd-tmpfiles --create /usr/lib/tmpfiles.d/nut-client.conf
324dacc
-ExecStart=@SBINDIR@/upsmon
324dacc
-PIDFile=@PIDPATH@/upsmon.pid
324dacc
-Type=forking
324dacc
+ExecStart=@SBINDIR@/upsmon -F
324dacc
+Type=simple
324dacc
 
324dacc
 [Install]
324dacc
 WantedBy=multi-user.target
0b850eb
diff -up nut-2.7.1/scripts/systemd/nut-server.service.in.foreground nut-2.7.1/scripts/systemd/nut-server.service.in
0b850eb
--- nut-2.7.1/scripts/systemd/nut-server.service.in.foreground	2013-07-26 21:41:11.000000000 +0200
0b850eb
+++ nut-2.7.1/scripts/systemd/nut-server.service.in	2014-02-27 11:39:58.152784529 +0100
324dacc
@@ -5,8 +5,8 @@ Requires=nut-driver.service
324dacc
 Before=nut-monitor.service
324dacc
 
324dacc
 [Service]
324dacc
-ExecStart=@SBINDIR@/upsd 
324dacc
-Type=forking
324dacc
+ExecStart=@SBINDIR@/upsd -F
324dacc
+Type=simple
324dacc
 
324dacc
 [Install]
324dacc
 WantedBy=multi-user.target
0b850eb
diff -up nut-2.7.1/server/upsd.c.foreground nut-2.7.1/server/upsd.c
0b850eb
--- nut-2.7.1/server/upsd.c.foreground	2013-07-26 21:41:11.000000000 +0200
0b850eb
+++ nut-2.7.1/server/upsd.c	2014-02-27 11:39:58.153784537 +0100
0b850eb
@@ -827,6 +827,7 @@ static void help(const char *progname)
324dacc
 	printf("		 - reload: reread configuration files\n");
324dacc
 	printf("		 - stop: stop process and exit\n");
324dacc
 	printf("  -D		raise debugging level\n");
324dacc
+	printf("  -F		run in foreground, do not daemonize\n");
324dacc
 	printf("  -h		display this help\n");
324dacc
 	printf("  -r <dir>	chroots to <dir>\n");
324dacc
 	printf("  -q		raise log level threshold\n");
0b850eb
@@ -890,7 +891,7 @@ void check_perms(const char *fn)
324dacc
 
324dacc
 int main(int argc, char **argv)
324dacc
 {
324dacc
-	int	i, cmd = 0;
324dacc
+	int	i, cmd = 0, foreground = 0;
324dacc
 	char	*chroot_path = NULL;
324dacc
 	const char	*user = RUN_AS_USER;
324dacc
 	struct passwd	*new_uid = NULL;
0b850eb
@@ -906,7 +907,7 @@ int main(int argc, char **argv)
324dacc
 
324dacc
 	printf("Network UPS Tools %s %s\n", progname, UPS_VERSION);
324dacc
 
324dacc
-	while ((i = getopt(argc, argv, "+h46p:qr:i:fu:Vc:D")) != -1) {
324dacc
+	while ((i = getopt(argc, argv, "+hF46p:qr:i:fu:Vc:D")) != -1) {
324dacc
 		switch (i) {
324dacc
 			case 'h':
324dacc
 				help(progname);
0b850eb
@@ -944,6 +945,10 @@ int main(int argc, char **argv)
324dacc
 				nut_debug_level++;
324dacc
 				break;
324dacc
 
324dacc
+			case 'F':
324dacc
+				foreground = 1;
324dacc
+				break;
324dacc
+
324dacc
 			case '4':
324dacc
 				opt_af = AF_INET;
324dacc
 				break;
0b850eb
@@ -1031,7 +1036,7 @@ int main(int argc, char **argv)
324dacc
 	/* handle upsd.users */
324dacc
 	user_load();
324dacc
 
324dacc
-	if (!nut_debug_level) {
324dacc
+	if (!nut_debug_level && !foreground) {
324dacc
 		background();
324dacc
 		writepid(pidfn);
324dacc
 	} else {