svok: new applet (daemontools compat)
function old new delta svok_main - 127 +127 packed_usage 32705 32757 +52 applet_names 2756 2761 +5 applet_main 1588 1592 +4 bb_banner 46 47 +1 sv 1286 1284 -2 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 4/1 up/down: 189/-2) Total: 187 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
d892f7137f
commit
0d79d7709d
@ -246,7 +246,8 @@ relative to the system-wide service directory.
|
||||
This proposal asks developers of other daemontools implementations
|
||||
to add "svc" command to their projects]
|
||||
|
||||
The "svok DIR" tool exits 0 if service is running, and nonzero if not.
|
||||
The "svok DIR" tool exits 0 if service supervisor is running
|
||||
(with service itself either running or stopped), and nonzero if not.
|
||||
|
||||
Other tools with different names and APIs may exist; however
|
||||
for portability scripts should use the above tools.
|
||||
|
@ -16,7 +16,7 @@ exec \
|
||||
env - PATH="$PATH" \
|
||||
softlimit \
|
||||
setuidgid root \
|
||||
ifplugd -apqlns -t3 -u8 -d8 -i "$if" -r "$pwd/ifplugd_handler"
|
||||
ifplugd -aqlns -t3 -u8 -d8 -i "$if" -r "$pwd/ifplugd_handler"
|
||||
|
||||
# We use -t3 to wake ifplugd up less often.
|
||||
# If after three tests (3*3=9 > 8) link state seen to be different,
|
||||
@ -24,6 +24,12 @@ ifplugd -apqlns -t3 -u8 -d8 -i "$if" -r "$pwd/ifplugd_handler"
|
||||
# IOW: short link losses will be ignored, longer ones
|
||||
# will trigger DHCP reconfiguration and such (see handler code).
|
||||
|
||||
# -l makes ifplugd run either "up" or "down" script on startup.
|
||||
# For example, if wired eth cable is unplugged, this stops dhcp service
|
||||
# from pointlessly trying to get a lease.
|
||||
# -q means that stopping monitoring does not stop dhcp/zcip/etc:
|
||||
# presumably, admin decided to control them manually.
|
||||
|
||||
#-a Don't up interface automatically
|
||||
#-p Don't run "up" script on startup
|
||||
#-q Don't run "down" script on exit
|
||||
|
55
runit/sv.c
55
runit/sv.c
@ -163,7 +163,7 @@ Exit Codes
|
||||
//config:config SV_DEFAULT_SERVICE_DIR
|
||||
//config: string "Default directory for services"
|
||||
//config: default "/var/service"
|
||||
//config: depends on SV
|
||||
//config: depends on SV || SVC || SVOK
|
||||
//config: help
|
||||
//config: Default directory for services.
|
||||
//config: Defaults to "/var/service"
|
||||
@ -173,13 +173,22 @@ Exit Codes
|
||||
//config: default y
|
||||
//config: help
|
||||
//config: svc controls the state of services monitored by the runsv supervisor.
|
||||
//config: It is comaptible with daemontools command with the same name.
|
||||
//config: It is compatible with daemontools command with the same name.
|
||||
//config:
|
||||
//config:config SVOK
|
||||
//config: bool "svok"
|
||||
//config: default y
|
||||
//config: help
|
||||
//config: svok checks whether runsv supervisor is running.
|
||||
//config: It is compatible with daemontools command with the same name.
|
||||
|
||||
//applet:IF_SV( APPLET_NOEXEC(sv, sv, BB_DIR_USR_BIN, BB_SUID_DROP, sv ))
|
||||
//applet:IF_SVC(APPLET_NOEXEC(svc, svc, BB_DIR_USR_BIN, BB_SUID_DROP, svc))
|
||||
//applet:IF_SVC( APPLET_NOEXEC(svc, svc, BB_DIR_USR_BIN, BB_SUID_DROP, svc ))
|
||||
//applet:IF_SVOK(APPLET_NOEXEC(svok, svok, BB_DIR_USR_BIN, BB_SUID_DROP, svok))
|
||||
|
||||
//kbuild:lib-$(CONFIG_SV) += sv.o
|
||||
//kbuild:lib-$(CONFIG_SVC) += sv.o
|
||||
//kbuild:lib-$(CONFIG_SVOK) += sv.o
|
||||
|
||||
#include <sys/file.h>
|
||||
#include "libbb.h"
|
||||
@ -615,7 +624,7 @@ static int sv(char **argv)
|
||||
service = argv;
|
||||
while ((x = *service) != NULL) {
|
||||
if (x[0] != '/' && x[0] != '.'
|
||||
&& x[0] != '\0' && x[strlen(x) - 1] != '/'
|
||||
&& !last_char_is(x, '/')
|
||||
) {
|
||||
if (chdir(varservice) == -1)
|
||||
goto chdir_failed_0;
|
||||
@ -742,3 +751,41 @@ int svc_main(int argc UNUSED_PARAM, char **argv)
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
//usage:#define svok_trivial_usage
|
||||
//usage: "SERVICE_DIR"
|
||||
//usage:#define svok_full_usage "\n\n"
|
||||
//usage: "Check whether runsv supervisor is running.\n"
|
||||
//usage: "Exit code is 0 if it does, 100 if it does not,\n"
|
||||
//usage: "111 (with error message) if SERVICE_DIR does not exist."
|
||||
#if ENABLE_SVOK
|
||||
int svok_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
|
||||
int svok_main(int argc UNUSED_PARAM, char **argv)
|
||||
{
|
||||
const char *dir = argv[1];
|
||||
|
||||
if (!dir)
|
||||
bb_show_usage();
|
||||
|
||||
xfunc_error_retval = 111;
|
||||
|
||||
/*
|
||||
* daemontools has no concept of "default service dir", runit does.
|
||||
* Let's act as runit.
|
||||
*/
|
||||
if (dir[0] != '/' && dir[0] != '.'
|
||||
&& !last_char_is(dir, '/')
|
||||
) {
|
||||
xchdir(CONFIG_SV_DEFAULT_SERVICE_DIR);
|
||||
}
|
||||
|
||||
xchdir(dir);
|
||||
if (open("supervise/ok", O_WRONLY) < 0) {
|
||||
if (errno == ENOENT || errno == ENXIO)
|
||||
return 100;
|
||||
bb_perror_msg_and_die("can't open '%s'", "supervise/ok");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user