To conserve electricity at home, all workstations and laptops are scheduled to shutdown nightly. With some modifications I adopted this routine to Linux workstations and laptops at work.
There are four shell scripts:
There is one
/usr/local/share/applications/nightly-shutdown-toggle.desktop file to provide users a convenient pointy-clicky way of not using a terminal window:
There is one
/etc/cron.d/nightly-shutdown cron job.
There is one
/etc/default/nightly configuration file.
The shutdowns are performed through the
nightly-shutdown script. The script can be used manually, but is expected to run through the cron job. The script sources the variables stored in
The cron job runs every hour. When an actual shutdown occurs is determined by the variables stored in
/etc/default/nightly. At home systems are scheduled to shutdown at 11:14 PM. At work the systems shutdown at 8:20 PM.
The nightly-shutdown script creates a status file
/tmp/nightly-shutdown that contains either
Disabled. Through the script, the status file is tagged
chgrp users and
chmod 666to allow all users to modify the file contents. The status file is created on boot from
rc.local through the
Presumed is all affected systems are scheduled to shutdown nightly. The nightly shutdowns can be disabled two ways. One is to manually edit the cron job and comment out the execution time. This is a sledge hammer method and requires root privileges. The second method is through the
nightly-shutdown-toggle script. This script toggles the value stored in
/tmp/nightly-shutdown and creates an override file
/tmp/no_shutdown. The override file contains either
nightly-shutdown-check returns the value stored in
/tmp/nightly-shutdown. The script can be run manually but is intended to be run by Conky. The returned value is then displayed in the Conky display.
To avoid users forgetting the cron job being disabled, the
nightly-shutdown-restore script is run from
rc.local. The script removes the hash symbol from the cron job.
Why the layered approach?
Mostly because of the challenge of how to determine whether a computer is actively being used. Exactly what determines activity? Keyboard and mouse activity are traditional methods of detection, but prone to error. For example, reading involves no keyboard or mouse activity until desiring to scroll the page. Watching a video involves no human interaction. Sometimes users walk away from a computer for a while. Sometimes users enable tasks that require no user interaction. For example, running an email client.
At work we use laptops in the field to service customers. During summer months some overtime hours is common. Occasionally the overtime is quite late. In such an event, a forced laptop shutdown would be frustrating and counter productive. Powering on the laptop would only meet the same fate an hour later because of the cron job.
/usr/local/share/applications/nightly-shutdown-toggle.desktop file creates a menu entry. The desktop file runs the
/usr/local/bin/nightly-shutdown-toggle script. Users can toggle off the nightly shutdown without a terminal window. The Conky display provides immediate feedback of the nightly shutdown status.
/tmp is a tmpfs file system, both the
/tmp/nightly-shutdown and override file
/tmp/no_shutdown are deleted on reboot or shutdown. On boot only the
/tmp/nightly-shutdown is recreated.
Why bother at all with laptops? We configure the workstations to automatically update packages. We cannot afford any such interruptions when working in the field. We also cannot know when a field laptop will be powered down or placed into suspend mode. Such actions would interrupt any background update. Because of these concerns and requirements, we connect the laptops weekly to the office subnet. I remotely update the laptops manually. We don’t want the laptops running all night for no other reason. Hence, having the laptops shutdown automatically is preferred.