De zomervakantie staat voor de deur, collega's hebben hun vakanties gepland en jij krijgt als systeembeheerder de taak te zorgen dat e-mails gedurende hun afwezigheid niet meer worden doorgestuurd.

De Plesk Mail Utitlity

Via de Mail Utitlity van Plesk kun je via de command-line forwarding adressen toevoegen en verwijderen van een e-mailontvanger. In onderstaand voorbeeld verwijderen we jan@voorbeeldbedrijf.nl uit support@voorbeeldbedrijf.nl:

/usr/local/psa/bin/mail -u support@voorbeeldbedrijf.nl -forwarding true -forwarding-addresses del:jan@voorbeeldbedrijf.nl

Wanneer we Jan weer toe willen voegen aan de Support-box, voegen vervangen we de del-prefix voor een add-prefix:

/usr/local/psa/bin/mail -u support@voorbeeldbedrijf.nl -forwarding true -forwarding-addresses add:jan@voorbeeldbedrijf.nl

Hiermee wordt de gebruiker echter direct uit de lijst met forwarders verwijderd. Handig, maar hier wil je als systeembeheerder natuurlijk niet speciaal extra vroeg je bed uit hoeven komen.

Opdrachten inplannen via at

Om de opdrachten in te plannen maken we gebruik van het at command. Via dit programma kun je een taak eenmalig laten uitvoeren op een gegeven datum. Ondanks dat er een breed bereik van datum en tijd formats geaccepteerd wordt, maken we hier gebruik van een nauwkeurige datum en tijd format. Wanneer jan bijvoorbeeld op 1 juni voor 3 weken op vakantie zou zijn (dus t/m de 21e), kan dit als volgt worden ingepland:

echo "/usr/local/psa/bin/mail -u support@voorbeeldbedrijf.nl -forwarding true -forwarding-addresses del:jan@voorbeeldbedrijf.nl" | at 0:00 2017-06-01
echo "/usr/local/psa/bin/mail -u support@voorbeeldbedrijf.nl -forwarding true -forwarding-addresses add:jan@voorbeeldbedrijf.nl" | at 0:00 2016-06-21

De taken tussen de aanhalingstekens van echo worden nu aan het at-commando gevoerd en voor gegeven datum ingepland. De opdracht zal warning: commands will be executed using /bin/sh teruggeven, gevolgd door de ID van de job, inclusief exacte datum en tijd van uitvoeren als: job 1 at Tue Jun 1 00:00:00 2017. De waarschuwing is hierbij normaal.

Geplande opdrachten bekijken met atq

Om vervolgens de geplande taken in te zien, kan er gebruik gemaakt worden van het atq-commando. Deze zal een lijst retourneren met de ID van de taak, gevolgd door een datum en tijd waarom dat deze taak is gepland. Om vervolgens de inhoud van een specifieke taak in te zien (m.a.w. om erachter te komen wat er nu precies gebeurt, gebruik je opnieuw het at-commando. Wanneer je de inhoud van de taak met ID 1 wilt zien kan dit als volgt:

at -c 1

Geplande opdrachten in een overzicht

Omdat bovenstaand proces geen simpel overzicht van de taken geeft, hebben we een simpel bash script gemaakt waarmee in een overzicht alle taken, chronologisch gesorteerd worden getoond. Kopieer de inhoud van onderstaand kader naar een nieuw bestand en sla dit bijvoorbeeld op als show-atq.sh.

#!/bin/bash
# Title: Print readable list of queued tasks
# Description: Get a simple and readable overview of queued tasks using the atq and
# at -c commands.
# Author: Roy Arisse <support@perfacilis.com>
# See: https://www.perfacilis.com/blog/systeembeheer/linux/forwarders-automatisch-aanpassen-in-plesk.html
# Version: 0.1
# Usage: bash show-atq.sh

LASTJOB=""
atq | sort -k 6n -k 3M -k 4n -k 5 -k 7 -k 1 | while IFS= read -r JOB; do
JOBID=$(echo $JOB | cut -d' ' -f1)
JOBDATE=$(echo $JOB | cut -d' ' -f2-)
JOBCMD=$(at -c $JOBID | tail -n2)

if [ "$JOBDATE" != "$LASTJOB" ]; then
echo
echo $JOBDATE
fi

echo " $JOBID. $JOBCMD"
LASTJOB="$JOBDATE"

done
echo

Vervolgens kun je met bash show-atq.sh jouw vakantieplanning bekijken.