Compare commits
	
		
			37 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 0287aa6588 | ||
|   | 1732c70fb5 | ||
|   | 263dde90c2 | ||
|   | 422795e2ce | ||
|   | 00ad99a292 | ||
|   | f026c2c541 | ||
|   | 4d20309ffe | ||
|   | 65439ba023 | ||
|   | 86162f3f47 | ||
|   | b98e83ee91 | ||
|   | d59197fafe | ||
|   | b66c86c9ee | ||
|   | 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 | 
							
								
								
									
										333
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										333
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,3 +1,264 @@ | ||||
| commit 1732c70fb5e6d75c0d104662d06169978c00a5e8 | ||||
| Author: Doug Freed <dwfreed@mtu.edu> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     rc-schedules: if given nothing to look for, stop | ||||
|      | ||||
|     This avoids trying to kill everything. | ||||
|      | ||||
|     X-Gentoo-Bug: 631958 | ||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=631958 | ||||
|  | ||||
| commit 263dde90c28ccd5abb1a60b6ba1f5f8be508164a | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     version 0.34.9 | ||||
|  | ||||
| commit 422795e2ceb723601e648f4f5cde55141c7e02f4 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     Update ChangeLog | ||||
|  | ||||
| commit 00ad99a29223e1567752191e748822710e1042e6 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     s6 supervisor fixes | ||||
|      | ||||
|     Add the ability to force-kill a service if it does not go down | ||||
|     successfully. Also, adjust the default wait time for an s6 service to go | ||||
|     down to 60 seconds. | ||||
|  | ||||
| commit f026c2c541f43eadbaed51b93379fdf56e1f1d0a | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     version 0.34.8 | ||||
|  | ||||
| commit 4d20309ffeb5f0211957bbbc5c875dab434b5079 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     Update ChangeLog | ||||
|  | ||||
| commit 65439ba023195786e71316f6638b52603e102f60 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     rc_find_pids: namespace fix | ||||
|      | ||||
|     Ignore namespaces if there are errors reading either the pid namespace | ||||
|     for the current process or the process we aare testing. | ||||
|      | ||||
|     This fixes https://github.com/openrc/openrc/issues/180. | ||||
|  | ||||
| commit 86162f3f47c393fc173de0458eeeb322c0bb61f2 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     version 0.34.7 | ||||
|  | ||||
| commit b98e83ee9195eb052fafebc440515f0b2d055a91 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     Update ChangeLog | ||||
|  | ||||
| commit d59197fafef164fe7319f9d87f544a8cc8e25044 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     start-stop-daemon: do not use do_stop to verify whether a daemon is running | ||||
|      | ||||
|     X-Gentoo-Bug: 636574 | ||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=636574 | ||||
|  | ||||
| commit b66c86c9ee6d34d0a9d77140b8e7612709ba19d1 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     version 0.34.6 | ||||
|  | ||||
| commit f7eb236f6fd8c10af211c6667940e8e1650c12da | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     Update ChangeLog | ||||
|  | ||||
| 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 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
| @@ -1400,75 +1661,3 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|      | ||||
|     The openntmpfiles package is designed so that it can be used on systems | ||||
|     independently of whether openrc is used. | ||||
|  | ||||
| commit 6414c3bc394f86a5d6a5f02c934469e21bbbc923 | ||||
| Author: Jason Zaman <jason@perfinion.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     selinux: fix SIGSEGV with invalid contexts | ||||
|      | ||||
|     Fixes: https://github.com/openrc/openrc/issues/104 | ||||
|  | ||||
| commit 4f9bd7e4db185ce6debbebb5242344d8ffadc3ae | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init.d/loopback.in: drop the route to the loopback interface on Linux | ||||
|      | ||||
|     This is related to #103. | ||||
|  | ||||
| commit bf539f2196290864ce5c5fd0d679b74ee016e2da | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init.d/mount-ro: do not remount /usr read only if it is premounted | ||||
|      | ||||
|     X-Gentoo-Bug: 573760 | ||||
|     X-Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=573760 | ||||
|  | ||||
| commit 20b60ea904612669dfb744beffcd8e7e447f69ef | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     conf.d/net-online: clarify comment about interfaces setting | ||||
|      | ||||
|     This setting refers to all interfaces that support ethernet | ||||
|  | ||||
| commit f53c8baef3a6215077c00901759cbbcbe8f10e9b | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init.d/net-online: remove interfaces and timeout from local declarations | ||||
|      | ||||
|     X-Gentoo-Bug:  598621 | ||||
|     X-Gentoo-Bug-URL:  https://bugs.gentoo.org/show_bug.cgi?id=598621 | ||||
|  | ||||
| commit be06cd250e12e63b8eb704bb2508e06fb9791251 | ||||
| Author: 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 | ||||
|  | ||||
| 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 | ||||
| VERSION=	0.34 | ||||
| VERSION=	0.34.9 | ||||
| PKG=		${NAME}-${VERSION} | ||||
|   | ||||
| @@ -111,9 +111,12 @@ The path to the s6 service directory if you are monitoring this service | ||||
| with S6. The default is /var/svc.d/${RC_SVCNAME}. | ||||
| .It Ar s6_svwait_options_start | ||||
| The options to pass to s6-svwait when starting the service via s6. | ||||
| .It Ar s6_force_kill | ||||
| Should we force-kill this service if s6_service_timeout_stop expires | ||||
| but the service doesn't go down during shutdown? The default is yes. | ||||
| .It Ar s6_service_timeout_stop | ||||
| The amount of time, in milliseconds, s6-svc should wait for the service | ||||
| to go down when stopping the service. The default is 10000. | ||||
| to go down when stopping the service. The default is 60000. | ||||
| .It Ar start_stop_daemon_args | ||||
| List of arguments passed to start-stop-daemon when starting the daemon. | ||||
| .It Ar command | ||||
|   | ||||
| @@ -39,6 +39,10 @@ s6_service_path - the path to the s6 service directory. The default is | ||||
| s6_svwait_options_start - the options to pass to s6-svwait when starting | ||||
| the service. If this is not set, s6-svwait will not be called. | ||||
|  | ||||
| s6_force_kill - Should we try to force kill this service if the | ||||
| s6_service_timeout_stop timeout expires when shutting down this service? | ||||
| The default is yes. | ||||
|  | ||||
| s6_service_timeout_stop - the amount of time, in milliseconds, s6-svc | ||||
| should wait for a service to go down when stopping. | ||||
|  | ||||
|   | ||||
| @@ -203,15 +203,21 @@ cgroup_cleanup() | ||||
| { | ||||
| 	cgroup_running || return 0 | ||||
| 	ebegin "starting cgroups cleanup" | ||||
| 	local pids | ||||
| 	local pids loops=0 | ||||
| 	pids="$(cgroup_get_pids)" | ||||
| 	if [ -n "${pids}" ]; then | ||||
| 		kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null | ||||
| 		kill -s CONT ${pids} 2> /dev/null | ||||
| 		kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null | ||||
| 		yesno "${rc_send_sighup:-no}" && | ||||
| 			kill -s HUP ${pids} 2> /dev/null | ||||
| 		sleep "${rc_timeout_stopsec:-90}" | ||||
| 		yesno "${rc_send_sigkill:-yes}" && | ||||
| 		kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null | ||||
| 		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 | ||||
| 	fi | ||||
| 	cgroup2_remove | ||||
|   | ||||
							
								
								
									
										20
									
								
								sh/s6.sh
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								sh/s6.sh
									
									
									
									
									
								
							| @@ -12,6 +12,20 @@ | ||||
|  | ||||
| [ -z "${s6_service_path}" ] && s6_service_path="/var/svc.d/${RC_SVCNAME}" | ||||
|  | ||||
| _s6_force_kill() { | ||||
| 	local pid | ||||
| 	s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" | ||||
| 	pid="${3%)}" | ||||
| 	[ -z "${pid}" ] && return 0 | ||||
| 	if kill -0 "${pid}" 2> /dev/null; then | ||||
| 		ewarn "Sending DOWN & KILL for ${RC_SVCNAME}" | ||||
| 		s6-svc -dk "${s6_service_link}" | ||||
| 		sleep 1 | ||||
| 		kill -0 "${pid}" 2>/dev/null && return 1 | ||||
| 	fi | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| s6_start() | ||||
| { | ||||
| 	if [ ! -d "${s6_service_path}" ]; then | ||||
| @@ -41,7 +55,11 @@ s6_stop() | ||||
|  fi | ||||
| 	s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" | ||||
| 	ebegin "Stopping ${name:-$RC_SVCNAME}" | ||||
| 	s6-svc -wD -d -T ${s6_service_timeout_stop:-10000} "${s6_service_link}" | ||||
| 	s6-svc -d -wD -T ${s6_service_timeout_stop:-60000} "${s6_service_link}" | ||||
| 	set -- $(s6-svstat "${s6_service_link}") | ||||
| 	[ "$1" = "up" ] &&  | ||||
| 		yesno "${s6_force_kill:-yes}" && | ||||
| 			_s6_force_kill "$@" | ||||
| 	set -- $(s6-svstat "${s6_service_link}") | ||||
| 	[ "$1" = "down" ] | ||||
| 	eend $? "Failed to stop ${name:-$RC_SVCNAME}" | ||||
|   | ||||
| @@ -22,7 +22,7 @@ supervise_start() | ||||
| 	# The eval call is necessary for cases like: | ||||
| 	# command_args="this \"is a\" test" | ||||
| 	# to work properly. | ||||
| 	eval supervise-daemon --start \ | ||||
| 	eval supervise-daemon "${RC_SVCNAME}" --start \ | ||||
| 		${retry:+--retry} $retry \ | ||||
| 		${chroot:+--chroot} $chroot \ | ||||
| 		${pidfile:+--pidfile} $pidfile \ | ||||
| @@ -49,14 +49,48 @@ supervise_stop() | ||||
| 	pidfile="${startpidfile:-$pidfile}" | ||||
| 	[ -n "$pidfile" ] || return 0 | ||||
| 	ebegin "Stopping ${name:-$RC_SVCNAME}" | ||||
| 	supervise-daemon --stop \ | ||||
| 	supervise-daemon "${RC_SVCNAME}" --stop \ | ||||
| 		${pidfile:+--pidfile} $chroot$pidfile \ | ||||
| 		${stopsig:+--signal} $stopsig | ||||
|  | ||||
| 	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() | ||||
| { | ||||
| 	_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 | ||||
| } | ||||
|   | ||||
| @@ -155,7 +155,7 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid) | ||||
| 			if (rc <= 0) | ||||
| 				proc_ns[0] = '\0'; | ||||
| 		} | ||||
| 		if (strcmp(my_ns, proc_ns)) | ||||
| 		if (strlen(my_ns) && strlen (proc_ns) && strcmp(my_ns, proc_ns)) | ||||
| 			continue; | ||||
| 		if (uid) { | ||||
| 			snprintf(buffer, sizeof(buffer), "/proc/%d", p); | ||||
|   | ||||
| @@ -894,12 +894,15 @@ rc_service_value_set(const char *service, const char *option, | ||||
| 		return false; | ||||
|  | ||||
| 	snprintf(p, sizeof(file) - (p - file), "/%s", option); | ||||
| 	if (!(fp = fopen(file, "w"))) | ||||
| 		return false; | ||||
| 	if (value) | ||||
| 	if (value) { | ||||
| 		if (!(fp = fopen(file, "w"))) | ||||
| 			return false; | ||||
| 		fprintf(fp, "%s", value); | ||||
| 	fclose(fp); | ||||
| 	return true; | ||||
| 		fclose(fp); | ||||
| 	} else { | ||||
| 		unlink(file); | ||||
| 	} | ||||
| 		return true; | ||||
| } | ||||
| librc_hidden_def(rc_service_value_set) | ||||
|  | ||||
|   | ||||
| @@ -307,6 +307,9 @@ int run_stop_schedule(const char *applet, | ||||
| 	const char *const *p; | ||||
| 	bool progressed = false; | ||||
|  | ||||
| 	if (!(pid > 0 || exec || uid || (argv && *argv))) | ||||
| 		return 0; | ||||
|  | ||||
| 	if (exec) | ||||
| 		einfov("Will stop %s", exec); | ||||
| 	if (pid > 0) | ||||
|   | ||||
| @@ -128,6 +128,8 @@ print_service(const char *service) | ||||
| { | ||||
| 	char status[60]; | ||||
| 	char uptime [40]; | ||||
| 	char *child_pid = NULL; | ||||
| 	char *start_time = NULL; | ||||
| 	int cols =  printf(" %s", service); | ||||
| 	const char *c = ecolor(ECOLOR_GOOD); | ||||
| 	RC_SERVICE state = rc_service_state(service); | ||||
| @@ -147,7 +149,14 @@ print_service(const char *service) | ||||
| 		    rc_service_daemons_crashed(service) && | ||||
| 		    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 { | ||||
| 			get_uptime(service, uptime, 40); | ||||
| 			snprintf(status, sizeof(status), " started %s", uptime); | ||||
|   | ||||
| @@ -279,6 +279,7 @@ int main(int argc, char **argv) | ||||
| 	int stdout_fd; | ||||
| 	int stderr_fd; | ||||
| 	pid_t pid, spid; | ||||
| 	RC_PIDLIST *pids; | ||||
| 	int i; | ||||
| 	char *svcname = getenv("RC_SVCNAME"); | ||||
| 	RC_STRINGLIST *env_list; | ||||
| @@ -683,10 +684,14 @@ int main(int argc, char **argv) | ||||
| 	else | ||||
| 		pid = 0; | ||||
|  | ||||
| 	if (do_stop(applet, exec, (const char * const *)margv, pid, uid, | ||||
| 		0, test, false) > 0) | ||||
| 	if (pid) | ||||
| 		pids = rc_find_pids(NULL, NULL, 0, pid); | ||||
| 	else | ||||
| 		pids = rc_find_pids(exec, (const char * const *) argv, uid, 0); | ||||
| 	if (pids) | ||||
| 		eerrorx("%s: %s is already running", applet, exec); | ||||
|  | ||||
| 	free(pids); | ||||
| 	if (test) { | ||||
| 		if (rc_yesno(getenv("EINFO_QUIET"))) | ||||
| 			exit (EXIT_SUCCESS); | ||||
|   | ||||
| @@ -161,8 +161,9 @@ static void cleanup(void) | ||||
|  | ||||
| static void re_exec(void) | ||||
| { | ||||
| 	syslog(LOG_WARNING, "Re-executing supervise-daemon"); | ||||
| 	execlp("supervise-daemon", "supervise-daemon", "--reexec", (char *) NULL); | ||||
| 	syslog(LOG_WARNING, "Re-executing for %s", svcname); | ||||
| 	execlp("supervise-daemon", "supervise-daemon", svcname, "--reexec", | ||||
| 			(char *) NULL); | ||||
| 	syslog(LOG_ERR, "Unable to execute supervise-daemon: %s", | ||||
| 			strerror(errno)); | ||||
| 	exit(EXIT_FAILURE); | ||||
| @@ -402,7 +403,7 @@ static void child_process(char *exec, char **argv) | ||||
| 		strcat(cmdline, " "); | ||||
| 		c++; | ||||
| 	} | ||||
| 	syslog(LOG_INFO, "Running command line: %s", cmdline); | ||||
| 	syslog(LOG_INFO, "Child command line: %s", cmdline); | ||||
| 	execvp(exec, argv); | ||||
|  | ||||
| #ifdef HAVE_PAM | ||||
| @@ -420,7 +421,6 @@ static void supervisor(char *exec, char **argv) | ||||
| 	time_t respawn_now= 0; | ||||
| 	time_t first_spawn= 0; | ||||
|  | ||||
| 	openlog(applet, LOG_PID, LOG_DAEMON); | ||||
| #ifndef RC_DEBUG | ||||
| 	signal_setup_restart(SIGHUP, handle_signal); | ||||
| 	signal_setup_restart(SIGINT, handle_signal); | ||||
| @@ -447,7 +447,9 @@ static void supervisor(char *exec, char **argv) | ||||
| #endif | ||||
| 	signal_setup_restart(SIGIO, handle_signal); | ||||
| 	signal_setup_restart(SIGPWR, handle_signal); | ||||
| #ifdef SIGUNUSED | ||||
| 	signal_setup_restart(SIGUNUSED, handle_signal); | ||||
| #endif | ||||
| #ifdef SIGRTMIN | ||||
| 	for (i = SIGRTMIN; i <= SIGRTMAX; i++) | ||||
| 		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, | ||||
| 				pidfile, false); | ||||
| 		rc_service_mark(svcname, RC_SERVICE_STOPPED); | ||||
| 		rc_service_value_set(svcname, "child_pid", NULL); | ||||
| 	} | ||||
| 	exit(EXIT_SUCCESS); | ||||
| } | ||||
| @@ -554,10 +557,17 @@ int main(int argc, char **argv) | ||||
| 	int child_argc = 0; | ||||
| 	char **child_argv = NULL; | ||||
| 	char *str = NULL; | ||||
| 	char cmdline[PATH_MAX]; | ||||
|  | ||||
| 	applet = basename_c(argv[0]); | ||||
| 	atexit(cleanup); | ||||
| 	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 (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, | ||||
| 		    (int *) 0)) != -1) | ||||
| 		switch (opt) { | ||||
| @@ -717,7 +738,6 @@ int main(int argc, char **argv) | ||||
|  | ||||
| 	if (!pidfile && !reexec) | ||||
| 		eerrorx("%s: --pidfile must be specified", applet); | ||||
|  | ||||
| 	endpwent(); | ||||
| 	argc -= optind; | ||||
| 	argv += optind; | ||||
| @@ -815,6 +835,7 @@ int main(int argc, char **argv) | ||||
| 			parse_schedule(applet, NULL, sig); | ||||
|  | ||||
| 		einfov("Detaching to start `%s'", exec); | ||||
| 		syslog(LOG_INFO, "Supervisor command line: %s", cmdline); | ||||
|  | ||||
| 		/* Remove existing pidfile */ | ||||
| 		if (pidfile) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user