rc-status -c now lists services that have crashed.
It returns 0 if there are crashed services, otherwise 1. This it easy to restart crashed services automatically. More for #120.
This commit is contained in:
		@@ -1,4 +1,4 @@
 | 
			
		||||
.\" Copyright 2007-2008 Roy Marples
 | 
			
		||||
.\" Copyright 2007-2009 Roy Marples
 | 
			
		||||
.\" All rights reserved
 | 
			
		||||
.\"
 | 
			
		||||
.\" Redistribution and use in source and binary forms, with or without
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
.\" SUCH DAMAGE.
 | 
			
		||||
.\"
 | 
			
		||||
.Dd Arp 9, 2008
 | 
			
		||||
.Dd April 24, 2008
 | 
			
		||||
.Dt RC-STATUS 8 SMM
 | 
			
		||||
.Os OpenRC
 | 
			
		||||
.Sh NAME
 | 
			
		||||
@@ -30,7 +30,7 @@
 | 
			
		||||
.Nd show status info about runlevels
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.Nm
 | 
			
		||||
.Op Fl alsuC
 | 
			
		||||
.Op Fl aclsuC
 | 
			
		||||
.Op Ar runlevel
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
.Nm
 | 
			
		||||
@@ -43,6 +43,8 @@ The options are as follows:
 | 
			
		||||
.Bl -tag -width ".Fl test , test string"
 | 
			
		||||
.It Fl a , -all
 | 
			
		||||
Show all runlevels and their services.
 | 
			
		||||
.It Fl c , -crashed
 | 
			
		||||
List all services that have crashed.
 | 
			
		||||
.It Fl l , -list
 | 
			
		||||
List all defined runlevels.
 | 
			
		||||
.It fl r , -runlevel
 | 
			
		||||
@@ -57,6 +59,9 @@ Disable color output.
 | 
			
		||||
Show information only for the named
 | 
			
		||||
.Ar runlevel .
 | 
			
		||||
.El
 | 
			
		||||
.Sh EXIT STATUS
 | 
			
		||||
.Nm
 | 
			
		||||
exits 0, except when checking for crashed services and it doesn't find any.
 | 
			
		||||
.Sh SEE ALSO
 | 
			
		||||
.Xr rc 8 ,
 | 
			
		||||
.Xr rc-update 8
 | 
			
		||||
 
 | 
			
		||||
@@ -172,9 +172,10 @@ print_services(const char *runlevel, RC_STRINGLIST *svcs)
 | 
			
		||||
 | 
			
		||||
#include "_usage.h"
 | 
			
		||||
#define extraopts "[runlevel1] [runlevel2] ..."
 | 
			
		||||
#define getoptstring "alrsu" getoptstring_COMMON
 | 
			
		||||
#define getoptstring "aclrsu" getoptstring_COMMON
 | 
			
		||||
static const struct option longopts[] = {
 | 
			
		||||
	{"all",         0, NULL, 'a'},
 | 
			
		||||
	{"crashed",     0, NULL, 'c'},
 | 
			
		||||
	{"list",        0, NULL, 'l'},
 | 
			
		||||
	{"runlevel",    0, NULL, 'r'},
 | 
			
		||||
	{"servicelist", 0, NULL, 's'},
 | 
			
		||||
@@ -183,6 +184,7 @@ static const struct option longopts[] = {
 | 
			
		||||
};
 | 
			
		||||
static const char * const longopts_help[] = {
 | 
			
		||||
	"Show services from all run levels",
 | 
			
		||||
	"Show crashed services",
 | 
			
		||||
	"Show list of run levels",
 | 
			
		||||
	"Show the name of the current runlevel",
 | 
			
		||||
	"Show service list",
 | 
			
		||||
@@ -196,7 +198,7 @@ rc_status(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	RC_STRING *s, *l, *t;
 | 
			
		||||
	char *p, *runlevel = NULL;
 | 
			
		||||
	int opt, aflag = 0;
 | 
			
		||||
	int opt, aflag = 0, retval = 0;
 | 
			
		||||
 | 
			
		||||
	test_crashed = _rc_can_find_pids();
 | 
			
		||||
 | 
			
		||||
@@ -207,10 +209,14 @@ rc_status(int argc, char **argv)
 | 
			
		||||
			aflag++;
 | 
			
		||||
			levels = rc_runlevel_list();
 | 
			
		||||
			break;
 | 
			
		||||
		case 'l':
 | 
			
		||||
			levels = rc_runlevel_list();
 | 
			
		||||
			TAILQ_FOREACH (l, levels, entries)
 | 
			
		||||
				printf("%s\n", l->value);
 | 
			
		||||
		case 'c':
 | 
			
		||||
			services = rc_services_in_state(RC_SERVICE_STARTED);
 | 
			
		||||
			retval = 1;
 | 
			
		||||
			TAILQ_FOREACH(s, services, entries)
 | 
			
		||||
				if (rc_service_daemons_crashed(s->value)) {
 | 
			
		||||
					printf("%s\n", s->value);
 | 
			
		||||
					retval = 0;
 | 
			
		||||
				}
 | 
			
		||||
			goto exit;
 | 
			
		||||
			/* NOTREACHED */
 | 
			
		||||
		case 'r':
 | 
			
		||||
@@ -344,5 +350,5 @@ exit:
 | 
			
		||||
	rc_deptree_free(deptree);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return(EXIT_SUCCESS);
 | 
			
		||||
	return retval;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user