diff options
author | Ron Yorston <rmy@pobox.com> | 2018-04-02 09:24:14 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2018-04-02 09:24:14 +0100 |
commit | 34a68d327b42c3c700e84cd475496985782290b1 (patch) | |
tree | 99bfe59cca420d26f01e81a7f41763f71b44d22c /runit | |
parent | aff3c5bd7b6bdcfb97f63153ab839c5f55f16a12 (diff) | |
parent | e84212f8346741a2d4a04b40639c44fe519cf5a7 (diff) | |
download | busybox-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.c | 57 |
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 | ||
762 | int svok_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; | ||
763 | int 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 | ||