Page MenuHomeFreeBSD

add ability to set watchdog timeout for a shutdown

Authored by avg on Aug 12 2019, 7:34 AM.



This change allows to specify a watchdog(9) timeout for a system
shutdown. The timeout is activated when the watchdogd daemon is
stopped. The idea is to a prevent any indefinite hang during late
stages of the shutdown. The feature is implemented in rc.d/watchdogd,
it builds upon watchdogd -x option.

Note that the shutdown timeout is not actiavted when the watchdogd
service is individually stopped by an operator. It is also not
activated for the 'shutdown' to the single-user mode. In those cases it
is assumed that the operator knows what they are doing and they have
means to recover the system should it hang.

Significant subchanges and implementation details:

  • the argument to rc.shutdown, completely unused before, is assigned to rc_shutdown variable that can be inspected by rc scripts
  • init(8) passes "single" or "reboot" as the argument, this is not changed
  • the argument is not mandatory and if it is not set then rc_shutdown is set to "unspecified"
  • however, the default jail management scripts and jail configuration examples have been updated to pass "jail" to rc.shutdown, just in case
  • the new timeout can be set via watchdogd_shutdown_timeout rc option
  • for consistency, the regular timeout can now be set via watchdogd_timeout rc option
  • watchdogd_shutdown_timeout and watchdogd_timeout override watchdogd_flags
  • existing configurations, where the new rc options are not set, should keep working as before

I am not particularly wed to any of the implementation specifics.
I am open to changing or removing any of them as long as the provided
functionality is the same (or very close) to the proposed one.
For example, I think it can be implemented without using watchdogd -x,
by means of watchdog(1) alone. In that case there would be a small
window between stopping watchdogd and running watchdog, but I think that
that is acceptable.

Test Plan

I manually tested various scenarios including:

  • service watchdog stop
  • shutdown now 'Going to single-user'
  • shutdown -r now 'Test reboot'

Diff Detail

rS FreeBSD src repository
Automatic diff as part of commit; lint not applicable.
Automatic diff as part of commit; unit tests not applicable.

Event Timeline

avg created this revision.Aug 12 2019, 7:34 AM
bcr accepted this revision as: manpages.Aug 12 2019, 11:39 AM
bcr added a subscriber: bcr.

OK from manpages. Interesting feature, I look forward to having it in the system. Thanks!

This revision was not accepted when it landed; it landed in state Needs Review.Thu, Oct 3, 11:23 AM
This revision was automatically updated to reflect the committed changes.