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,11 +894,14 @@ 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 (value) {
|
||||||
if (!(fp = fopen(file, "w")))
|
if (!(fp = fopen(file, "w")))
|
||||||
return false;
|
return false;
|
||||||
if (value)
|
|
||||||
fprintf(fp, "%s", value);
|
fprintf(fp, "%s", value);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
} else {
|
||||||
|
unlink(file);
|
||||||
|
}
|
||||||
return true;
|
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)
|
||||||
{
|
{
|
||||||
|
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 ");
|
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