diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2018-03-30 20:02:33 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-03-30 20:02:33 +0200 |
commit | 0d79d7709dc490378b1c3e1c99ea565767118118 (patch) | |
tree | c0ac9b9b4f0fdc2bd2e0bf5990856b17dcbf69e5 | |
parent | d892f7137f43373123ab6c63006b5ff9b3481664 (diff) | |
download | busybox-w32-0d79d7709dc490378b1c3e1c99ea565767118118.tar.gz busybox-w32-0d79d7709dc490378b1c3e1c99ea565767118118.tar.bz2 busybox-w32-0d79d7709dc490378b1c3e1c99ea565767118118.zip |
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>
-rw-r--r-- | examples/var_service/README_distro_proposal.txt | 3 | ||||
-rwxr-xr-x | examples/var_service/ifplugd_if/run | 8 | ||||
-rw-r--r-- | runit/sv.c | 57 |
3 files changed, 61 insertions, 7 deletions
diff --git a/examples/var_service/README_distro_proposal.txt b/examples/var_service/README_distro_proposal.txt index ec887b4e1..f161406a7 100644 --- a/examples/var_service/README_distro_proposal.txt +++ b/examples/var_service/README_distro_proposal.txt | |||
@@ -246,7 +246,8 @@ relative to the system-wide service directory. | |||
246 | This proposal asks developers of other daemontools implementations | 246 | This proposal asks developers of other daemontools implementations |
247 | to add "svc" command to their projects] | 247 | to add "svc" command to their projects] |
248 | 248 | ||
249 | The "svok DIR" tool exits 0 if service is running, and nonzero if not. | 249 | The "svok DIR" tool exits 0 if service supervisor is running |
250 | (with service itself either running or stopped), and nonzero if not. | ||
250 | 251 | ||
251 | Other tools with different names and APIs may exist; however | 252 | Other tools with different names and APIs may exist; however |
252 | for portability scripts should use the above tools. | 253 | for portability scripts should use the above tools. |
diff --git a/examples/var_service/ifplugd_if/run b/examples/var_service/ifplugd_if/run index fade8b98d..5d1d4e355 100755 --- a/examples/var_service/ifplugd_if/run +++ b/examples/var_service/ifplugd_if/run | |||
@@ -16,7 +16,7 @@ exec \ | |||
16 | env - PATH="$PATH" \ | 16 | env - PATH="$PATH" \ |
17 | softlimit \ | 17 | softlimit \ |
18 | setuidgid root \ | 18 | setuidgid root \ |
19 | ifplugd -apqlns -t3 -u8 -d8 -i "$if" -r "$pwd/ifplugd_handler" | 19 | ifplugd -aqlns -t3 -u8 -d8 -i "$if" -r "$pwd/ifplugd_handler" |
20 | 20 | ||
21 | # We use -t3 to wake ifplugd up less often. | 21 | # We use -t3 to wake ifplugd up less often. |
22 | # If after three tests (3*3=9 > 8) link state seen to be different, | 22 | # 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" | |||
24 | # IOW: short link losses will be ignored, longer ones | 24 | # IOW: short link losses will be ignored, longer ones |
25 | # will trigger DHCP reconfiguration and such (see handler code). | 25 | # will trigger DHCP reconfiguration and such (see handler code). |
26 | 26 | ||
27 | # -l makes ifplugd run either "up" or "down" script on startup. | ||
28 | # For example, if wired eth cable is unplugged, this stops dhcp service | ||
29 | # from pointlessly trying to get a lease. | ||
30 | # -q means that stopping monitoring does not stop dhcp/zcip/etc: | ||
31 | # presumably, admin decided to control them manually. | ||
32 | |||
27 | #-a Don't up interface automatically | 33 | #-a Don't up interface automatically |
28 | #-p Don't run "up" script on startup | 34 | #-p Don't run "up" script on startup |
29 | #-q Don't run "down" script on exit | 35 | #-q Don't run "down" script on exit |
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 | ||