Name
mahalt – Shutdown system after invoking scripts.
Synposis
mahalt [-f] [-r]
Description
This script is intended to serve as a means of shutting down desktop systems.
The following features are added compared to a direct invocation of
systemctl poweroff (or similar):
- Regular users should be able to invoke shutdown. By including sudo configuration and a means to automatically restart the script with sudo, it becomes possible for users to conveniently invoke the script.
- To perform backups and other tasks that are best run individually
without other services interfering, directory
/usr/lib/mahalt.dis consulted for executable files. They are executed in the order reported byfind | sort. - Before invoking the actual shutdown command, all Java applications
are sent a
SIGTERMandsyncis called. - If immediately before invoking the actual shutdown,
/tmp/nohaltexists, the process is cancelled. This feature can be used by the scripts in/usr/lib/mahalt.dor by users on the local machine who wish to interrupt the shutdown process without cancelling any of the running hooks from/usr/lib/mahalt.d.
Notes on hooks
- All executables form
/usr/lib/mahalt.dare passed parameter--by-mahalt. - Outputs from hooks are written to file
/var/log/mahaltand can thus be analyzed after the next reboot.
WARNING: Sudo Configuration Included
This package includes a sudoers configuration allowing user
linux-fan to run the mahalt command which
makes a shutdown-style command available to a user. Beware
that this is not expected to be a safe operation on servers as regular
users may not have physical access.
Options
-f |
Fast – skip execution of hooks from
/usr/lib/mahalt.d |
-r |
Reboot instead of shutdown |
Rationale
Similar to vifm-ext(32), this
script could have been written in a manner that would have avoided the
use of sudo/full-blown root privileges for shutdown. Modern desktop
environments use dbus-based calls to invoke shutdown and
the regular systemctl poweroff nowdays often works for
unprivileged users if systemd detects that they are the only ones logged
in to the local system.
This route was not taken for the following reasons:
- Similar to mounting, the interface for “shutdown without root” often broke between release upgrades.
- Ma_Sys.ma Backups run as root as to avoid the problem of files being inaccessible due to missing permissions. Hence, that part would need to run with sudo anyways.
Bugs
- File names from below
/usr/lib/mahalt.dmay not contain spaces. - The
killall -s TERM javainvocation may stop some processes that should better be managed by their respective “supervisors” like systemd or docker…