aboutsummaryrefslogtreecommitdiff
path: root/runit
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2018-04-02 09:24:14 +0100
committerRon Yorston <rmy@pobox.com>2018-04-02 09:24:14 +0100
commit34a68d327b42c3c700e84cd475496985782290b1 (patch)
tree99bfe59cca420d26f01e81a7f41763f71b44d22c /runit
parentaff3c5bd7b6bdcfb97f63153ab839c5f55f16a12 (diff)
parente84212f8346741a2d4a04b40639c44fe519cf5a7 (diff)
downloadbusybox-w32-34a68d327b42c3c700e84cd475496985782290b1.tar.gz
busybox-w32-34a68d327b42c3c700e84cd475496985782290b1.tar.bz2
busybox-w32-34a68d327b42c3c700e84cd475496985782290b1.zip
Merge branch 'busybox' into merge
Diffstat (limited to 'runit')
-rw-r--r--runit/sv.c57
1 files changed, 52 insertions, 5 deletions
diff --git a/runit/sv.c b/runit/sv.c
index dc5dcceb3..86d181872 100644
--- a/runit/sv.c
+++ b/runit/sv.c
@@ -163,7 +163,7 @@ Exit Codes
163//config:config SV_DEFAULT_SERVICE_DIR 163//config:config SV_DEFAULT_SERVICE_DIR
164//config: string "Default directory for services" 164//config: string "Default directory for services"
165//config: default "/var/service" 165//config: default "/var/service"
166//config: depends on SV 166//config: depends on SV || SVC || SVOK
167//config: help 167//config: help
168//config: Default directory for services. 168//config: Default directory for services.
169//config: Defaults to "/var/service" 169//config: Defaults to "/var/service"
@@ -173,13 +173,22 @@ Exit Codes
173//config: default y 173//config: default y
174//config: help 174//config: help
175//config: svc controls the state of services monitored by the runsv supervisor. 175//config: svc controls the state of services monitored by the runsv supervisor.
176//config: It is comaptible with daemontools command with the same name. 176//config: It is compatible with daemontools command with the same name.
177//config:
178//config:config SVOK
179//config: bool "svok"
180//config: default y
181//config: help
182//config: svok checks whether runsv supervisor is running.
183//config: It is compatible with daemontools command with the same name.
177 184
178//applet:IF_SV( APPLET_NOEXEC(sv, sv, BB_DIR_USR_BIN, BB_SUID_DROP, sv )) 185//applet:IF_SV( APPLET_NOEXEC(sv, sv, BB_DIR_USR_BIN, BB_SUID_DROP, sv ))
179//applet:IF_SVC(APPLET_NOEXEC(svc, svc, BB_DIR_USR_BIN, BB_SUID_DROP, svc)) 186//applet:IF_SVC( APPLET_NOEXEC(svc, svc, BB_DIR_USR_BIN, BB_SUID_DROP, svc ))
187//applet:IF_SVOK(APPLET_NOEXEC(svok, svok, BB_DIR_USR_BIN, BB_SUID_DROP, svok))
180 188
181//kbuild:lib-$(CONFIG_SV) += sv.o 189//kbuild:lib-$(CONFIG_SV) += sv.o
182//kbuild:lib-$(CONFIG_SVC) += sv.o 190//kbuild:lib-$(CONFIG_SVC) += sv.o
191//kbuild:lib-$(CONFIG_SVOK) += sv.o
183 192
184#include <sys/file.h> 193#include <sys/file.h>
185#include "libbb.h" 194#include "libbb.h"
@@ -615,7 +624,7 @@ static int sv(char **argv)
615 service = argv; 624 service = argv;
616 while ((x = *service) != NULL) { 625 while ((x = *service) != NULL) {
617 if (x[0] != '/' && x[0] != '.' 626 if (x[0] != '/' && x[0] != '.'
618 && x[0] != '\0' && x[strlen(x) - 1] != '/' 627 && !last_char_is(x, '/')
619 ) { 628 ) {
620 if (chdir(varservice) == -1) 629 if (chdir(varservice) == -1)
621 goto chdir_failed_0; 630 goto chdir_failed_0;
@@ -742,3 +751,41 @@ int svc_main(int argc UNUSED_PARAM, char **argv)
742 return 0; 751 return 0;
743} 752}
744#endif 753#endif
754
755//usage:#define svok_trivial_usage
756//usage: "SERVICE_DIR"
757//usage:#define svok_full_usage "\n\n"
758//usage: "Check whether runsv supervisor is running.\n"
759//usage: "Exit code is 0 if it does, 100 if it does not,\n"
760//usage: "111 (with error message) if SERVICE_DIR does not exist."
761#if ENABLE_SVOK
762int svok_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
763int svok_main(int argc UNUSED_PARAM, char **argv)
764{
765 const char *dir = argv[1];
766
767 if (!dir)
768 bb_show_usage();
769
770 xfunc_error_retval = 111;
771
772 /*
773 * daemontools has no concept of "default service dir", runit does.
774 * Let's act as runit.
775 */
776 if (dir[0] != '/' && dir[0] != '.'
777 && !last_char_is(dir, '/')
778 ) {
779 xchdir(CONFIG_SV_DEFAULT_SERVICE_DIR);
780 }
781
782 xchdir(dir);
783 if (open("supervise/ok", O_WRONLY) < 0) {
784 if (errno == ENOENT || errno == ENXIO)
785 return 100;
786 bb_perror_msg_and_die("can't open '%s'", "supervise/ok");
787 }
788
789 return 0;
790}
791#endif