Add power cycle support to reboot/halt as -c.
When -c is specified, the system will be power cycled if the underlying hardware supports it. Otherwise the system will be halted or rebooted depending on which command was used. Sponsored by: Netflix
This commit is contained in:
parent
2f467bc5fe
commit
981a951111
@ -28,7 +28,7 @@
|
|||||||
.\" @(#)reboot.8 8.1 (Berkeley) 6/9/93
|
.\" @(#)reboot.8 8.1 (Berkeley) 6/9/93
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd March 19, 2017
|
.Dd October 23, 2017
|
||||||
.Dt REBOOT 8
|
.Dt REBOOT 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -42,7 +42,7 @@
|
|||||||
.Op Fl lNnpq
|
.Op Fl lNnpq
|
||||||
.Op Fl k Ar kernel
|
.Op Fl k Ar kernel
|
||||||
.Nm
|
.Nm
|
||||||
.Op Fl dlNnpqr
|
.Op Fl cdlNnpqr
|
||||||
.Op Fl k Ar kernel
|
.Op Fl k Ar kernel
|
||||||
.Nm fasthalt
|
.Nm fasthalt
|
||||||
.Op Fl lNnpq
|
.Op Fl lNnpq
|
||||||
@ -66,6 +66,20 @@ accounting database.
|
|||||||
.Pp
|
.Pp
|
||||||
The options are as follows:
|
The options are as follows:
|
||||||
.Bl -tag -width indent
|
.Bl -tag -width indent
|
||||||
|
.It Fl c
|
||||||
|
The system will turn off the power and then turn it back on if it can.
|
||||||
|
If the power down action fails, the system
|
||||||
|
will halt or reboot normally, depending on whether
|
||||||
|
.Nm halt
|
||||||
|
or
|
||||||
|
.Nm
|
||||||
|
was called.
|
||||||
|
At the present time, only the
|
||||||
|
.Xr ipmi 4
|
||||||
|
driver implements the power cycle functionality and only on hardware
|
||||||
|
with a BMC that supports power cycling.
|
||||||
|
Unlike power off, the amount of hardware that supports power cycling
|
||||||
|
is small.
|
||||||
.It Fl d
|
.It Fl d
|
||||||
The system is requested to create a crash dump.
|
The system is requested to create a crash dump.
|
||||||
This option is
|
This option is
|
||||||
@ -162,6 +176,7 @@ reboot -r
|
|||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr kenv 1 ,
|
.Xr kenv 1 ,
|
||||||
.Xr getutxent 3 ,
|
.Xr getutxent 3 ,
|
||||||
|
.Xr ipmi 4 ,
|
||||||
.Xr boot 8 ,
|
.Xr boot 8 ,
|
||||||
.Xr dumpon 8 ,
|
.Xr dumpon 8 ,
|
||||||
.Xr nextboot 8 ,
|
.Xr nextboot 8 ,
|
||||||
|
@ -77,8 +77,11 @@ main(int argc, char *argv[])
|
|||||||
} else
|
} else
|
||||||
howto = 0;
|
howto = 0;
|
||||||
lflag = nflag = qflag = Nflag = 0;
|
lflag = nflag = qflag = Nflag = 0;
|
||||||
while ((ch = getopt(argc, argv, "dk:lNnpqr")) != -1)
|
while ((ch = getopt(argc, argv, "cdk:lNnpqr")) != -1)
|
||||||
switch(ch) {
|
switch(ch) {
|
||||||
|
case 'c':
|
||||||
|
howto |= RB_POWERCYCLE;
|
||||||
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
howto |= RB_DUMP;
|
howto |= RB_DUMP;
|
||||||
break;
|
break;
|
||||||
@ -116,8 +119,10 @@ main(int argc, char *argv[])
|
|||||||
errx(1, "cannot dump (-d) when halting; must reboot instead");
|
errx(1, "cannot dump (-d) when halting; must reboot instead");
|
||||||
if (Nflag && (howto & RB_NOSYNC) != 0)
|
if (Nflag && (howto & RB_NOSYNC) != 0)
|
||||||
errx(1, "-N cannot be used with -n");
|
errx(1, "-N cannot be used with -n");
|
||||||
|
if ((howto & RB_POWEROFF) && (howto & RB_POWERCYCLE))
|
||||||
|
errx(1, "-c and -p cannot be used together");
|
||||||
if ((howto & RB_REROOT) != 0 && howto != RB_REROOT)
|
if ((howto & RB_REROOT) != 0 && howto != RB_REROOT)
|
||||||
errx(1, "-r cannot be used with -d, -n, or -p");
|
errx(1, "-r cannot be used with -c, -d, -n, or -p");
|
||||||
if (geteuid()) {
|
if (geteuid()) {
|
||||||
errno = EPERM;
|
errno = EPERM;
|
||||||
err(1, NULL);
|
err(1, NULL);
|
||||||
@ -151,6 +156,12 @@ main(int argc, char *argv[])
|
|||||||
} else if (howto & RB_REROOT) {
|
} else if (howto & RB_REROOT) {
|
||||||
openlog("reroot", 0, LOG_AUTH | LOG_CONS);
|
openlog("reroot", 0, LOG_AUTH | LOG_CONS);
|
||||||
syslog(LOG_CRIT, "rerooted by %s", user);
|
syslog(LOG_CRIT, "rerooted by %s", user);
|
||||||
|
} else if (howto & RB_POWEROFF) {
|
||||||
|
openlog("reboot", 0, LOG_AUTH | LOG_CONS);
|
||||||
|
syslog(LOG_CRIT, "powered off by %s", user);
|
||||||
|
} else if (howto & RB_POWERCYCLE) {
|
||||||
|
openlog("reboot", 0, LOG_AUTH | LOG_CONS);
|
||||||
|
syslog(LOG_CRIT, "power cycled by %s", user);
|
||||||
} else {
|
} else {
|
||||||
openlog("reboot", 0, LOG_AUTH | LOG_CONS);
|
openlog("reboot", 0, LOG_AUTH | LOG_CONS);
|
||||||
syslog(LOG_CRIT, "rebooted by %s", user);
|
syslog(LOG_CRIT, "rebooted by %s", user);
|
||||||
|
Loading…
Reference in New Issue
Block a user