summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--man/runscript.83
-rw-r--r--src/rc/runscript.c8
2 files changed, 10 insertions, 1 deletions
diff --git a/man/runscript.8 b/man/runscript.8
index 6ad6031..dbc0b7d 100644
--- a/man/runscript.8
+++ b/man/runscript.8
@@ -32,6 +32,7 @@
.Op Fl D , -nodeps
.Op Fl d , -debug
.Op Fl s , -ifstarted
+.Op Fl S , -ifstopped
.Op Fl Z , -dry-run
.Op Ar command ...
.Sh DESCRIPTION
@@ -76,6 +77,8 @@ Set xtrace on in the shell to assist in debugging.
Ignore all dependency information the service supplies.
.It Fl s , -ifstarted
Only run the command if the service has been started.
+.It Fl S , -ifstopped
+Only run the command if the service has been stopped.
.It Fl q , -quiet
Turns off all informational output the service generates.
Output from any non OpenRC commands is not affected.
diff --git a/src/rc/runscript.c b/src/rc/runscript.c
index 2f66971..8e0ced9 100644
--- a/src/rc/runscript.c
+++ b/src/rc/runscript.c
@@ -1079,12 +1079,13 @@ service_plugable(void)
}
#include "_usage.h"
-#define getoptstring "dDsvl:Z" getoptstring_COMMON
+#define getoptstring "dDsSvl:Z" getoptstring_COMMON
#define extraopts "stop | start | restart | describe | zap"
static const struct option longopts[] = {
{ "debug", 0, NULL, 'd'},
{ "dry-run", 0, NULL, 'Z'},
{ "ifstarted", 0, NULL, 's'},
+ { "ifstopped", 0, NULL, 'S'},
{ "nodeps", 0, NULL, 'D'},
{ "lockfd", 1, NULL, 'l'},
longopts_COMMON
@@ -1093,6 +1094,7 @@ static const char *const longopts_help[] = {
"set xtrace when running the script",
"show what would be done",
"only run commands when started",
+ "only run commands when stopped",
"ignore dependencies",
"fd of the exclusive lock from rc",
longopts_help_COMMON
@@ -1235,6 +1237,10 @@ runscript(int argc, char **argv)
if (!(rc_service_state(service) & RC_SERVICE_STARTED))
exit(EXIT_FAILURE);
break;
+ case 'S':
+ if (!(rc_service_state(service) & RC_SERVICE_STOPPED))
+ exit(EXIT_FAILURE);
+ break;
case 'D':
deps = false;
break;