Compare commits
	
		
			25 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | f7eb236f6f | ||
|   | 1936d73eb1 | ||
|   | 58872fc090 | ||
|   | fc35eb90ca | ||
|   | b18be3f970 | ||
|   | 027438f775 | ||
|   | 93e159ae85 | ||
|   | bcfcf50562 | ||
|   | d0097cc10f | ||
|   | eecf868e3c | ||
|   | a5cd486a7f | ||
|   | 6e6b4ac5fa | ||
|   | 558ff4d5fb | ||
|   | 490f855aef | ||
|   | d1491e201d | ||
|   | 3231af9375 | ||
|   | a5758e7aef | ||
|   | 61a9393ce1 | ||
|   | 161d22cb07 | ||
|   | 3a96ca1c96 | ||
|   | 934530914b | ||
|   | b717625cd2 | ||
|   | b475396134 | ||
|   | e7b1d898ca | ||
|   | 5cd09a6f44 | 
							
								
								
									
										196
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										196
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,3 +1,175 @@ | |||||||
|  | commit 1936d73eb1aecf31029d53e75e6bb14e307f8e1c | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     fix issue with --reexec call | ||||||
|  |  | ||||||
|  | commit 58872fc090af5047547bc561a5e58c50be0fc235 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     version 0.34.5 | ||||||
|  |  | ||||||
|  | commit fc35eb90cab625966ca718a80dd0d38dfffe05b8 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Update ChangeLog | ||||||
|  |  | ||||||
|  | commit b18be3f970eba04589977438faaa726b5c3a6cd2 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: use RC_SVCNAME as the first argument to the daemon | ||||||
|  |      | ||||||
|  |     This makes ps show which service the supervisor is monitoring. | ||||||
|  |  | ||||||
|  | commit 027438f7759dbbc19ac1bedeff3f502c891e4d4e | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: fix logging for reexec and the child command line | ||||||
|  |  | ||||||
|  | commit 93e159ae8541b82fd5e1843f60dce135e2eb5517 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     log as supervise-daemon not the service | ||||||
|  |  | ||||||
|  | commit bcfcf50562a081088248f693dfab62d3eab04efa | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     version 0.34.4 | ||||||
|  |  | ||||||
|  | commit d0097cc10f8701de1b6a5665c54abf909e897233 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Update ChangeLog | ||||||
|  |  | ||||||
|  | commit eecf868e3c4a763b08cd4b3803f4839e8e710413 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: clarify a log message | ||||||
|  |  | ||||||
|  | commit a5cd486a7fbb5acf8e8f3085500fd86c23dd8641 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Update ChangeLog | ||||||
|  |  | ||||||
|  | commit 6e6b4ac5fa935eb8052d293f2b8378e0395572e1 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: log the command line we run to spawn the child process | ||||||
|  |  | ||||||
|  | commit 558ff4d5fb90b751ebc2852ea907873af2c236fa | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: log with the service name instead of "supervise-daemon" | ||||||
|  |  | ||||||
|  | commit 490f855aef581a720c6c0be0d8407fe6d279f9f5 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     implement "unsupervised" status | ||||||
|  |      | ||||||
|  |     The unsupervised status is to be used when a supervisor of a supervised | ||||||
|  |     service dies but leaves the service daemon itself running. | ||||||
|  |  | ||||||
|  | commit d1491e201d3ad364e25a55b29ff8035775a6acac | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: remove child_pid from saved options during shutdown | ||||||
|  |      | ||||||
|  |     This allows us to detect when the supervisor dies unexpectedly because | ||||||
|  |     in that case child_pid will still exist. | ||||||
|  |  | ||||||
|  | commit 3231af937590b1c00af1a459009472a371aeb04a | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     rc_service_value_set: remove the option if NULL is the value | ||||||
|  |      | ||||||
|  |     This allows the equivalent of "unsetting" a value for a service. | ||||||
|  |  | ||||||
|  | commit a5758e7aeffbeb9766ba3055a3fc347f0ccd3d35 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon.sh: fix status function with no namespaces | ||||||
|  |  | ||||||
|  | commit 61a9393ce12fda412bdca4002ac71e7df82384df | ||||||
|  | Author: Patrick McLean <chutzpah@gentoo.org> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     cgroups_cleanup: clean up shutdown signaling | ||||||
|  |      | ||||||
|  |     - do not sleep for the full 90 seconds if processes are dead | ||||||
|  |     - re-arrange the order of signals we attempt to send to the processes | ||||||
|  |  | ||||||
|  | commit 161d22cb074ecef7003e19682d72a8ee61c14490 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     version 0.34.3 | ||||||
|  |  | ||||||
|  | commit 3a96ca1c966c3cc44a2e0e51b383ab47d078bcc1 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Update ChangeLog | ||||||
|  |  | ||||||
|  | commit 934530914bd507476b428d3f6572bbb1c5bbfd16 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     add "unsupervised" status and return code 64 to supervise-daemon status function | ||||||
|  |      | ||||||
|  |     This is to be used if the service is being supervised and the | ||||||
|  |     supervisor is somehow killed. | ||||||
|  |      | ||||||
|  |     Currently, this is very linux specific, but I will expand to other | ||||||
|  |     platforms, patches are welcome. | ||||||
|  |  | ||||||
|  | commit b717625cd27950c3f00b5345bc1cee9700e79498 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     version 0.34.2 | ||||||
|  |  | ||||||
|  | commit b47539613431521e5e99bc388e6a9d8eb0e48801 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Update ChangeLog | ||||||
|  |  | ||||||
|  | commit e7b1d898ca7896d6443ba1e5167eb6bcf3f92929 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: fix build issue for >=glibc-2.26 | ||||||
|  |      | ||||||
|  |     X-Gentoo-Bug: 635334 | ||||||
|  |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=635334 | ||||||
|  |  | ||||||
|  | commit 5cd09a6f44aa7d16ab7de1453e37d01448426031 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     version 0.34.1 | ||||||
|  |  | ||||||
|  | commit f3c70bf5b5aa18e8dc94d4949f05568e0741c5cb | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Update ChangeLog | ||||||
|  |  | ||||||
| commit f5acc66db7d1a0bfad6a40eefc0240b80f52df94 | commit f5acc66db7d1a0bfad6a40eefc0240b80f52df94 | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
| @@ -1448,27 +1620,3 @@ Author: William Hubbs <w.d.hubbs@gmail.com> | |||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|     src/rc/rc: do not try to start services if fork fails |     src/rc/rc: do not try to start services if fork fails | ||||||
|  |  | ||||||
| commit 003657c973ea338a19f2b7294190af9d76cf5cea |  | ||||||
| Author: Robin H. Johnson <robbat2@gentoo.org> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     init.d/loopback: drop scope on loopback |  | ||||||
|      |  | ||||||
|     Busybox does not support the 'scope' argument on 'ip address add' or 'ip |  | ||||||
|     route add', this is documented in BUSYBOX.md, but is no longer actually |  | ||||||
|     needed, as the kernel does get it right without manual specification, |  | ||||||
|     and the ifconfig variant already relies on the kernel to get it right. |  | ||||||
|     This is part of #103. |  | ||||||
|      |  | ||||||
|     X-Gentoo-Bug: 487208 |  | ||||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=487208 |  | ||||||
|  |  | ||||||
| commit 4fd144c0a6526963c70f18cb34a65354c2f0a48c |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     src/rc/rc-misc.c: report error if call to flock() fails |  | ||||||
|      |  | ||||||
|     X-Gentoo-Bug: 597390 |  | ||||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=597390 |  | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| NAME=		openrc | NAME=		openrc | ||||||
| VERSION=	0.34 | VERSION=	0.34.5 | ||||||
| PKG=		${NAME}-${VERSION} | PKG=		${NAME}-${VERSION} | ||||||
|   | |||||||
| @@ -203,15 +203,21 @@ cgroup_cleanup() | |||||||
| { | { | ||||||
| 	cgroup_running || return 0 | 	cgroup_running || return 0 | ||||||
| 	ebegin "starting cgroups cleanup" | 	ebegin "starting cgroups cleanup" | ||||||
| 	local pids | 	local pids loops=0 | ||||||
| 	pids="$(cgroup_get_pids)" | 	pids="$(cgroup_get_pids)" | ||||||
| 	if [ -n "${pids}" ]; then | 	if [ -n "${pids}" ]; then | ||||||
| 		kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null |  | ||||||
| 		kill -s CONT ${pids} 2> /dev/null | 		kill -s CONT ${pids} 2> /dev/null | ||||||
|  | 		kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null | ||||||
| 		yesno "${rc_send_sighup:-no}" && | 		yesno "${rc_send_sighup:-no}" && | ||||||
| 			kill -s HUP ${pids} 2> /dev/null | 			kill -s HUP ${pids} 2> /dev/null | ||||||
| 		sleep "${rc_timeout_stopsec:-90}" | 		kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null | ||||||
| 		yesno "${rc_send_sigkill:-yes}" && | 		while [ -n "$(cgroup_get_pids)" ] && | ||||||
|  | 			[ "${loops}" -lt "${rc_timeout_stopsec:-90}" ]; do | ||||||
|  | 			loops=$((loops+1)) | ||||||
|  | 			sleep 1 | ||||||
|  | 		done | ||||||
|  | 		pids="$(cgroup_get_pids)" | ||||||
|  | 		[ -n "${pids}" ] && yesno "${rc_send_sigkill:-yes}" && | ||||||
| 			kill -s KILL ${pids} 2> /dev/null | 			kill -s KILL ${pids} 2> /dev/null | ||||||
| 	fi | 	fi | ||||||
| 	cgroup2_remove | 	cgroup2_remove | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ supervise_start() | |||||||
| 	# The eval call is necessary for cases like: | 	# The eval call is necessary for cases like: | ||||||
| 	# command_args="this \"is a\" test" | 	# command_args="this \"is a\" test" | ||||||
| 	# to work properly. | 	# to work properly. | ||||||
| 	eval supervise-daemon --start \ | 	eval supervise-daemon "${RC_SVCNAME}" --start \ | ||||||
| 		${retry:+--retry} $retry \ | 		${retry:+--retry} $retry \ | ||||||
| 		${chroot:+--chroot} $chroot \ | 		${chroot:+--chroot} $chroot \ | ||||||
| 		${pidfile:+--pidfile} $pidfile \ | 		${pidfile:+--pidfile} $pidfile \ | ||||||
| @@ -49,14 +49,48 @@ supervise_stop() | |||||||
| 	pidfile="${startpidfile:-$pidfile}" | 	pidfile="${startpidfile:-$pidfile}" | ||||||
| 	[ -n "$pidfile" ] || return 0 | 	[ -n "$pidfile" ] || return 0 | ||||||
| 	ebegin "Stopping ${name:-$RC_SVCNAME}" | 	ebegin "Stopping ${name:-$RC_SVCNAME}" | ||||||
| 	supervise-daemon --stop \ | 	supervise-daemon "${RC_SVCNAME}" --stop \ | ||||||
| 		${pidfile:+--pidfile} $chroot$pidfile \ | 		${pidfile:+--pidfile} $chroot$pidfile \ | ||||||
| 		${stopsig:+--signal} $stopsig | 		${stopsig:+--signal} $stopsig | ||||||
|  |  | ||||||
| 	eend $? "Failed to stop ${name:-$RC_SVCNAME}" | 	eend $? "Failed to stop ${name:-$RC_SVCNAME}" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | _check_supervised() | ||||||
|  | { | ||||||
|  | 	local child_pid start_time | ||||||
|  | 	child_pid="$(service_get_value "child_pid")" | ||||||
|  | 	start_time="$(service_get_value "start_time")" | ||||||
|  | 	if [ -n "${child_pid}" ] && [ -n "${start_time}" ]; then | ||||||
|  | 		return 1 | ||||||
|  | 	fi | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
| supervise_status() | supervise_status() | ||||||
| { | { | ||||||
| 	_status | 	if service_stopping; then | ||||||
|  | 		ewarn "status: stopping" | ||||||
|  | 		return 4 | ||||||
|  | 	elif service_starting; then | ||||||
|  | 		ewarn "status: starting" | ||||||
|  | 		return 8 | ||||||
|  | 	elif service_inactive; then | ||||||
|  | 		ewarn "status: inactive" | ||||||
|  | 		return 16 | ||||||
|  | 	elif service_started; then | ||||||
|  | 		if service_crashed; then | ||||||
|  | 			if ! _check_supervised; then | ||||||
|  | 				eerror "status: unsupervised" | ||||||
|  | 				return 64 | ||||||
|  | 			fi | ||||||
|  | 			eerror "status: crashed" | ||||||
|  | 			return 32 | ||||||
|  | 		fi | ||||||
|  | 		einfo "status: started" | ||||||
|  | 		return 0 | ||||||
|  | 	else | ||||||
|  | 		einfo "status: stopped" | ||||||
|  | 		return 3 | ||||||
|  | 	fi | ||||||
| } | } | ||||||
|   | |||||||
| @@ -894,12 +894,15 @@ rc_service_value_set(const char *service, const char *option, | |||||||
| 		return false; | 		return false; | ||||||
|  |  | ||||||
| 	snprintf(p, sizeof(file) - (p - file), "/%s", option); | 	snprintf(p, sizeof(file) - (p - file), "/%s", option); | ||||||
| 	if (!(fp = fopen(file, "w"))) | 	if (value) { | ||||||
| 		return false; | 		if (!(fp = fopen(file, "w"))) | ||||||
| 	if (value) | 			return false; | ||||||
| 		fprintf(fp, "%s", value); | 		fprintf(fp, "%s", value); | ||||||
| 	fclose(fp); | 		fclose(fp); | ||||||
| 	return true; | 	} else { | ||||||
|  | 		unlink(file); | ||||||
|  | 	} | ||||||
|  | 		return true; | ||||||
| } | } | ||||||
| librc_hidden_def(rc_service_value_set) | librc_hidden_def(rc_service_value_set) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -128,6 +128,8 @@ print_service(const char *service) | |||||||
| { | { | ||||||
| 	char status[60]; | 	char status[60]; | ||||||
| 	char uptime [40]; | 	char uptime [40]; | ||||||
|  | 	char *child_pid = NULL; | ||||||
|  | 	char *start_time = NULL; | ||||||
| 	int cols =  printf(" %s", service); | 	int cols =  printf(" %s", service); | ||||||
| 	const char *c = ecolor(ECOLOR_GOOD); | 	const char *c = ecolor(ECOLOR_GOOD); | ||||||
| 	RC_SERVICE state = rc_service_state(service); | 	RC_SERVICE state = rc_service_state(service); | ||||||
| @@ -147,7 +149,14 @@ print_service(const char *service) | |||||||
| 		    rc_service_daemons_crashed(service) && | 		    rc_service_daemons_crashed(service) && | ||||||
| 		    errno != EACCES) | 		    errno != EACCES) | ||||||
| 		{ | 		{ | ||||||
| 			snprintf(status, sizeof(status), " crashed "); | 			child_pid = rc_service_value_get(service, "child_pid"); | ||||||
|  | 			start_time = rc_service_value_get(service, "start_time"); | ||||||
|  | 			if (start_time && child_pid) | ||||||
|  | 				snprintf(status, sizeof(status), " unsupervised "); | ||||||
|  | 			else | ||||||
|  | 				snprintf(status, sizeof(status), " crashed "); | ||||||
|  | 			free(child_pid); | ||||||
|  | 			free(start_time); | ||||||
| 		} else { | 		} else { | ||||||
| 			get_uptime(service, uptime, 40); | 			get_uptime(service, uptime, 40); | ||||||
| 			snprintf(status, sizeof(status), " started %s", uptime); | 			snprintf(status, sizeof(status), " started %s", uptime); | ||||||
|   | |||||||
| @@ -161,8 +161,9 @@ static void cleanup(void) | |||||||
|  |  | ||||||
| static void re_exec(void) | static void re_exec(void) | ||||||
| { | { | ||||||
| 	syslog(LOG_WARNING, "Re-executing supervise-daemon"); | 	syslog(LOG_WARNING, "Re-executing for %s", svcname); | ||||||
| 	execlp("supervise-daemon", "supervise-daemon", "--reexec", (char *) NULL); | 	execlp("supervise-daemon", "supervise-daemon", svcname, "--reexec", | ||||||
|  | 			(char *) NULL); | ||||||
| 	syslog(LOG_ERR, "Unable to execute supervise-daemon: %s", | 	syslog(LOG_ERR, "Unable to execute supervise-daemon: %s", | ||||||
| 			strerror(errno)); | 			strerror(errno)); | ||||||
| 	exit(EXIT_FAILURE); | 	exit(EXIT_FAILURE); | ||||||
| @@ -402,7 +403,7 @@ static void child_process(char *exec, char **argv) | |||||||
| 		strcat(cmdline, " "); | 		strcat(cmdline, " "); | ||||||
| 		c++; | 		c++; | ||||||
| 	} | 	} | ||||||
| 	syslog(LOG_INFO, "Running command line: %s", cmdline); | 	syslog(LOG_INFO, "Child command line: %s", cmdline); | ||||||
| 	execvp(exec, argv); | 	execvp(exec, argv); | ||||||
|  |  | ||||||
| #ifdef HAVE_PAM | #ifdef HAVE_PAM | ||||||
| @@ -420,7 +421,6 @@ static void supervisor(char *exec, char **argv) | |||||||
| 	time_t respawn_now= 0; | 	time_t respawn_now= 0; | ||||||
| 	time_t first_spawn= 0; | 	time_t first_spawn= 0; | ||||||
|  |  | ||||||
| 	openlog(applet, LOG_PID, LOG_DAEMON); |  | ||||||
| #ifndef RC_DEBUG | #ifndef RC_DEBUG | ||||||
| 	signal_setup_restart(SIGHUP, handle_signal); | 	signal_setup_restart(SIGHUP, handle_signal); | ||||||
| 	signal_setup_restart(SIGINT, handle_signal); | 	signal_setup_restart(SIGINT, handle_signal); | ||||||
| @@ -447,7 +447,9 @@ static void supervisor(char *exec, char **argv) | |||||||
| #endif | #endif | ||||||
| 	signal_setup_restart(SIGIO, handle_signal); | 	signal_setup_restart(SIGIO, handle_signal); | ||||||
| 	signal_setup_restart(SIGPWR, handle_signal); | 	signal_setup_restart(SIGPWR, handle_signal); | ||||||
|  | #ifdef SIGUNUSED | ||||||
| 	signal_setup_restart(SIGUNUSED, handle_signal); | 	signal_setup_restart(SIGUNUSED, handle_signal); | ||||||
|  | #endif | ||||||
| #ifdef SIGRTMIN | #ifdef SIGRTMIN | ||||||
| 	for (i = SIGRTMIN; i <= SIGRTMAX; i++) | 	for (i = SIGRTMIN; i <= SIGRTMAX; i++) | ||||||
| 		signal_setup_restart(i, handle_signal); | 		signal_setup_restart(i, handle_signal); | ||||||
| @@ -521,6 +523,7 @@ static void supervisor(char *exec, char **argv) | |||||||
| 		rc_service_daemon_set(svcname, exec, (const char *const *)argv, | 		rc_service_daemon_set(svcname, exec, (const char *const *)argv, | ||||||
| 				pidfile, false); | 				pidfile, false); | ||||||
| 		rc_service_mark(svcname, RC_SERVICE_STOPPED); | 		rc_service_mark(svcname, RC_SERVICE_STOPPED); | ||||||
|  | 		rc_service_value_set(svcname, "child_pid", NULL); | ||||||
| 	} | 	} | ||||||
| 	exit(EXIT_SUCCESS); | 	exit(EXIT_SUCCESS); | ||||||
| } | } | ||||||
| @@ -554,10 +557,17 @@ int main(int argc, char **argv) | |||||||
| 	int child_argc = 0; | 	int child_argc = 0; | ||||||
| 	char **child_argv = NULL; | 	char **child_argv = NULL; | ||||||
| 	char *str = NULL; | 	char *str = NULL; | ||||||
|  | 	char cmdline[PATH_MAX]; | ||||||
|  |  | ||||||
| 	applet = basename_c(argv[0]); | 	applet = basename_c(argv[0]); | ||||||
| 	atexit(cleanup); | 	atexit(cleanup); | ||||||
| 	svcname = getenv("RC_SVCNAME"); | 	svcname = getenv("RC_SVCNAME"); | ||||||
|  | 	if (!svcname) | ||||||
|  | 		eerrorx("%s: The RC_SVCNAME environment variable is not set", applet); | ||||||
|  | 	openlog(applet, LOG_PID, LOG_DAEMON); | ||||||
|  |  | ||||||
|  | 	if (argc >= 1 && svcname && strcmp(argv[1], svcname)) | ||||||
|  | 		eerrorx("%s: the first argument must be %s", applet, svcname); | ||||||
|  |  | ||||||
| 	if ((tmp = getenv("SSD_NICELEVEL"))) | 	if ((tmp = getenv("SSD_NICELEVEL"))) | ||||||
| 		if (sscanf(tmp, "%d", &nicelevel) != 1) | 		if (sscanf(tmp, "%d", &nicelevel) != 1) | ||||||
| @@ -579,6 +589,17 @@ int main(int argc, char **argv) | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	*cmdline = '\0'; | ||||||
|  | 	c = argv; | ||||||
|  | 	while (c && *c) { | ||||||
|  | 		strcat(cmdline, *c); | ||||||
|  | 		strcat(cmdline, " "); | ||||||
|  | 		c++; | ||||||
|  | 	} | ||||||
|  | 	if (svcname) { | ||||||
|  | 		argc--; | ||||||
|  | 		argv++; | ||||||
|  | 	} | ||||||
| 	while ((opt = getopt_long(argc, argv, getoptstring, longopts, | 	while ((opt = getopt_long(argc, argv, getoptstring, longopts, | ||||||
| 		    (int *) 0)) != -1) | 		    (int *) 0)) != -1) | ||||||
| 		switch (opt) { | 		switch (opt) { | ||||||
| @@ -717,7 +738,6 @@ int main(int argc, char **argv) | |||||||
|  |  | ||||||
| 	if (!pidfile && !reexec) | 	if (!pidfile && !reexec) | ||||||
| 		eerrorx("%s: --pidfile must be specified", applet); | 		eerrorx("%s: --pidfile must be specified", applet); | ||||||
|  |  | ||||||
| 	endpwent(); | 	endpwent(); | ||||||
| 	argc -= optind; | 	argc -= optind; | ||||||
| 	argv += optind; | 	argv += optind; | ||||||
| @@ -815,6 +835,7 @@ int main(int argc, char **argv) | |||||||
| 			parse_schedule(applet, NULL, sig); | 			parse_schedule(applet, NULL, sig); | ||||||
|  |  | ||||||
| 		einfov("Detaching to start `%s'", exec); | 		einfov("Detaching to start `%s'", exec); | ||||||
|  | 		syslog(LOG_INFO, "Supervisor command line: %s", cmdline); | ||||||
|  |  | ||||||
| 		/* Remove existing pidfile */ | 		/* Remove existing pidfile */ | ||||||
| 		if (pidfile) | 		if (pidfile) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user