rc-update: add option to remove a service from all runlevels
The -a option,which only applies to the del command, is used to remove a service from all runlevels. X-Gentoo-Bug: 497740 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=497740
This commit is contained in:
parent
54ab12d218
commit
abadaa04ab
@ -21,7 +21,7 @@
|
||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.Dd May 2, 2009
|
||||
.Dd Jan 13, 2014
|
||||
.Dt RC-UPDATE 8 SMM
|
||||
.Os OpenRC
|
||||
.Sh NAME
|
||||
@ -35,6 +35,7 @@
|
||||
.Op Ar runlevel ...
|
||||
.Nm
|
||||
.Op Fl s , -stack
|
||||
.Op Fl a , -all
|
||||
.Ar delete
|
||||
.Ar service
|
||||
.Op Ar runlevel ...
|
||||
@ -86,9 +87,16 @@ If the
|
||||
.Fl s , -stack
|
||||
option is given then we either add or remove the runlevel from the runlevel.
|
||||
This allows inheritance of runlevels.
|
||||
|
||||
If the
|
||||
.Fl a, -all
|
||||
option is given, we remove the service from all runlevels. This is
|
||||
useful, for example, to clean up the dangling symlinks after a service
|
||||
is removed.
|
||||
.Sh SEE ALSO
|
||||
.Xr openrc 8 ,
|
||||
.Xr openrc-run 8 ,
|
||||
.Xr rc-status 8
|
||||
.Sh AUTHORS
|
||||
.An Roy Marples <roy@marples.name>
|
||||
.An The OpenRC Team <openrc@gentoo.org>
|
||||
|
@ -199,13 +199,15 @@ show(RC_STRINGLIST *runlevels, bool verbose)
|
||||
"Usage: rc-update [options] add <service> [<runlevel>...]\n" \
|
||||
" or: rc-update [options] del <service> [<runlevel>...]\n" \
|
||||
" or: rc-update [options] [show [<runlevel>...]]"
|
||||
#define getoptstring "su" getoptstring_COMMON
|
||||
#define getoptstring "asu" getoptstring_COMMON
|
||||
static const struct option longopts[] = {
|
||||
{ "all", 0, NULL, 'a' },
|
||||
{ "stack", 0, NULL, 's' },
|
||||
{ "update", 0, NULL, 'u' },
|
||||
longopts_COMMON
|
||||
};
|
||||
static const char * const longopts_help[] = {
|
||||
"Process all runlevels",
|
||||
"Stack a runlevel instead of a service",
|
||||
"Force an update of the dependency tree",
|
||||
longopts_help_COMMON
|
||||
@ -225,7 +227,7 @@ rc_update(int argc, char **argv)
|
||||
char *service = NULL;
|
||||
char *p;
|
||||
int action = 0;
|
||||
bool verbose = false, stack = false;
|
||||
bool verbose = false, stack = false, all_runlevels = false;
|
||||
int opt;
|
||||
int retval = EXIT_FAILURE;
|
||||
int num_updated = 0;
|
||||
@ -235,6 +237,9 @@ rc_update(int argc, char **argv)
|
||||
while ((opt = getopt_long(argc, argv, getoptstring,
|
||||
longopts, (int *)0)) != -1)
|
||||
switch (opt) {
|
||||
case 'a':
|
||||
all_runlevels = true;
|
||||
break;
|
||||
case 's':
|
||||
stack = true;
|
||||
break;
|
||||
@ -306,6 +311,10 @@ rc_update(int argc, char **argv)
|
||||
eerror ("%s: no service specified", applet);
|
||||
else {
|
||||
if (action & DOADD) {
|
||||
if (all_runlevels) {
|
||||
rc_stringlist_free(runlevels);
|
||||
eerrorx("%s: the -a option is invalid with add", applet);
|
||||
}
|
||||
actfunc = stack ? addstack : add;
|
||||
} else if (action & DODELETE) {
|
||||
actfunc = stack ? delstack : delete;
|
||||
@ -315,9 +324,14 @@ rc_update(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (!TAILQ_FIRST(runlevels)) {
|
||||
p = rc_runlevel_get();
|
||||
rc_stringlist_add(runlevels, p);
|
||||
free(p);
|
||||
if (all_runlevels) {
|
||||
free(runlevels);
|
||||
runlevels = rc_runlevel_list();
|
||||
} else {
|
||||
p = rc_runlevel_get();
|
||||
rc_stringlist_add(runlevels, p);
|
||||
free(p);
|
||||
}
|
||||
}
|
||||
|
||||
if (!TAILQ_FIRST(runlevels)) {
|
||||
|
Loading…
Reference in New Issue
Block a user