System - Luk ned og vågn op dagligt


Source: Download script

Last Updated: 11. September 2025 by Agnete Moos (agms@sonderborg.dk)

Parameters:

Navn Type Standardværdi Påkrævet
Click to see the source code
#!/usr/bin/env bash

# SYNOPSIS
#    shutdown_and_wakeup.sh --args 
#
# DESCRIPTION
#    This is a script to make a OS2BorgerPC machine shutdown at a certain time.
#    Synopsis:
#
#      shutdown_and_wakeup.sh 
#
#    to enable shutdown mechanism.
#
#      shutdown_and_wakeup.sh --off
#
#    to disable.
#
#    We'll suppose the user only wants to have regular shutdown once a day
#    as specified by the and  parameters. Thus, any line in
#    crontab already specifying a shutdown will be deleted before a new one is
#    inserted.
#    We'll also suppose the user wants the machine to wakeup after X numbers
#     of hours after shutdown everyday.
#
# IMPLEMENTATION
#    author          Danni Als
#    copyright       Copyright 2018, Magenta Aps"
#    license         GNU General Public License

set -x

WAKE_PLAN_FILE=/etc/os2borgerpc/plan.json
SCHEDULED_OFF_SCRIPT="/usr/local/lib/os2borgerpc/scheduled_off.sh"
USER_CLEANUP="/usr/share/os2borgerpc/bin/user-cleanup.bash"

if [ -f $WAKE_PLAN_FILE ]; then
  echo "Dette script kan ikke anvendes på en PC, der er tilknyttet en tænd/sluk tidsplan."
  exit 1
fi

ROOTCRON_TMP=/tmp/oldcron
USERCRON=/etc/os2borgerpc/usercron
if grep "LANG=" /etc/default/locale | grep "sv"; then
  MESSAGE="Den här datorn stängs av om fem minuter"
elif grep "LANG=" /etc/default/locale | grep "en"; then
  MESSAGE="This computer will shut down in five minutes"
else
  MESSAGE="Denne computer lukker ned om fem minutter"
fi

mkdir --parents "$(dirname $SCHEDULED_OFF_SCRIPT)"

# Read and save current cron settings first
crontab -l > $ROOTCRON_TMP

# Ensure that the usercron-file exists and has the correct permissions
touch $USERCRON
chmod 700 $USERCRON

# Delete current crontab entries related to this script AND shutdown_at_time
sed --in-place --expression "/rtcwake/d" --expression "/scheduled_off/d" --expression "/shutdown/d" $ROOTCRON_TMP
sed --in-place "/notify-send/d" $USERCRON

if [ "$1" == "--off" ]; then
    rm --force $SCHEDULED_OFF_SCRIPT
else

    # If not called with --off: Determine the new crontab contents
    if [ $# -gt 2 ]; then
        cat < $SCHEDULED_OFF_SCRIPT
#!/usr/bin/env bash

MODE=\$1
DURATION=\$2

pkill -KILL -u user
pkill -KILL -u superuser
/usr/sbin/rtcwake --mode \$MODE --seconds \$DURATION
EOF

        chmod 700 $SCHEDULED_OFF_SCRIPT
        HOURS=$1
        MINUTES=$2
        SECONDS_TO_WAKEUP=$(( 3600 * $3))

        # If not set set it to the previous script default: off
        [ -z "$4" ] && MODE="off" || MODE=$4

        # Assume the parameters are already validated as integers.
        echo "$MINUTES $HOURS * * * $SCHEDULED_OFF_SCRIPT $MODE $SECONDS_TO_WAKEUP" >> $ROOTCRON_TMP

        MINM5P60=$(( $(( MINUTES - 5)) + 60))
        # Rounding minutes
        MINS=$(( MINM5P60 % 60))
        HRCORR=$(( 1 - $(( MINM5P60 / 60))))
        HRS=$(( HOURS - HRCORR))
        HRS=$(( $(( HRS + 24)) % 24))
        # Now output to user's crontab as well
        echo "$MINS $HRS * * * XDG_RUNTIME_DIR=/run/user/\$(id -u) /usr/bin/notify-send \"$MESSAGE\"" >> $USERCRON
    else
        echo "Usage: shutdown_and_wakeup.sh [--off] [hours minutes] [hours]"
    fi
fi

# Update crontabs accordingly - either with an empty crontab or updated ones
crontab $ROOTCRON_TMP
crontab -u user $USERCRON

# Ensure that user-cleanup resets the user crontab
if [ -f "$USER_CLEANUP" ] && ! grep --quiet "crontab" $USER_CLEANUP; then
  echo "crontab -u user $USERCRON" >> $USER_CLEANUP
fi

rm --force $ROOTCRON_TMP

Beskrivelse

Dette script sætter computeren til at lukke ned og vågne op på det samme tidspunkt hver dag.

Som argumenter tager scriptet:

  1. Det timetal for hvornår, maskinen skal lukke NED
  2. Det minuttal for hvornår, maskinen skal lukke NED Dvs. de første to parametre til sammen afgører præcist hvornår - eksempelvis 16 og 30 vil betyde: 16:30
  3. Det antal timer efter nedlukning, hvor maskinen skal starte. Eksempel: Nedlukningstidspunktet er 16:30, og tredje parameter sættes til 14, så vil maskinen starte op 06:30.
  4. Tilstand - vi anbefaler at afprøve “off” først, da det er den mest strømbesparende. Se nærmere info her: https://linux.die.net/man/8/rtcwake Hvis parametret udelades svarer det også til at skrive “off”.

Det er muligt at angive “–off” (uden citationstegn) som første parameter og 0 som de næste tre parametre. Dette standser den daglige nedlukning.

BEMÆRK: Hvis I selv eller Borger lukker maskinen manuelt, vil den IKKE vågne op. Den SKAL lukkes ned af dette script, da den derved lukkes af kommandoen “rtcwake”, som også er den proces, der vækker maskinen op. Derfor anbefaler vi at kombinere dette med scriptet “Desktop - Fjern Luk Ned, Genstart og Hviletilstand fra sessionmenuen og blokér for nedlukning via systempolitik”, så maskinen ikke længere kan lukkes fra menuen, men kun via tryk på knap, hive strømstikket eller via scripts dertil fra adminsitet, såsom “System - Luk computeren NU”.

Dette script er blevet testet og virker på Ubuntu 22.04.