(Terug) naar scripts op heeck.nl of heeck.nl

******************************************************************************************
idleshutdown

Waar we vroeger lustig doorhobby-den met stapels 24/7 draaiende PC's als lokaal serverparkje wordt de energierekening tegenwoordig steeds meer een punt van aandacht. Het oude laptopje wat hier als intranet- en fileserver fungeert hoeft niet altijd te draaien en is desgewenst met een Wake On Lan pakketje in no-time weer aan te slingeren.

Dit scriptje draait elke 5 minuten in de crontab van die laptop en verzamelt triggers van actieve processen en/of timestamps van logfiles. Als er een nieuwe activiteit bij komt hoef ik alleen maar een extra triggertje in het script toe te voegen wat in de map /tmp/idleshutdown een bestandje aantikt. Alle triggers zouden ook naar hetzelfde bestand kunnen loggen maar ik vind het wel handig onderweg te kunnen zien wat er gebeurt, vandaar dat ik heb gekozen voor een bestand per trigger.
Als er na het ingestelde aantal minuten, nu een heel uur, niets is gebeurd op de machine, kijkend naar het nieuwste bestand in de werkmap, dan schakelt 'ie zichzelf uit.

De triggers die er nu toe doen zijn:
  1. Zijn er samba clients/mounts actief?
  2. Is er iemand via ssh ingelogd?
  3. Zijn er recente aanroepen naar de webserver geweest?
01 #!/bin/bash
02 #
03 #
04 # shutdown the system after grace period of no activity in minutes
05 grace=60
06 
07 # activities to be logged only need to touch a file in the working directory,
08 # the age of the most recent file is considered for the grace period
09 
10 # working directory in /tmp, deleted before shutdown in case /tmp isn't cleared completely
11 workdir="/tmp/idleshutdown"
12 mkdir -p $workdir
13 # log boot to prevent a shutdown before first activity, only if not done yet
14 [[ -f $workdir"/boot" ]] || touch $workdir"/boot"
15
16 # log active smb mounts
17 if [ `sudo smbstatus | wc -l` -gt 10 ]
18 then
19 	touch $workdir"/smbmounts"
20 fi
21 
22 # log active logins
23 if [ `last | grep "still logged in"| wc -l` -gt 0 ]
24 then
25 	touch $workdir"/logins"
26 fi
27 
28 # log last webserver access time
29 touch -r /var/log/apache2/other_vhosts_access.log $workdir"/webserver_other_vhosts_access"
30 touch -r /var/log/apache2/access.log $workdir"/webserver_access"
31 
32 # calculate age for most recent file in folder
33 cd $workdir
34 logdate=$(stat -c %Y `ls -rt |tail -1`)
35 curdate=`date +%s`
36 diffsec=$((curdate-logdate))
37 # compare with set grace period
38 gracesec=$((grace*60))
39 if [ $diffsec -gt $gracesec ]
40 then
41 	cd
42 	rm -rf $workdir
43 	sudo shutdown -h 1 > /dev/null 2>&1
44 fi
Als je last hebt van de regelnummers in deze pagina geef je hem maar aan je systeembeheerder :-)
13-01-2023
* Begin **********************************************************************************