Gerne würde ich diese VMs automatisch herunterfahren, wenn sie eine Zeit lang (z.B. zwei Stunden) nicht verwendet worden sind. Die VMs werden dabei per SSH verwendet; Zugriff auf darauf eingerichtete Services (Web-Server, Datenbanken usw.) sind nicht relevant. Besteht keine SSH-Verbindung, kann die VM nach zwei Stunden heruntergefahren werden.
Ich habe folgende Idee:
- Eine SSH-Verbindung wird automatisch unterbrochen, wenn sie eine Stunde inaktiv war.
- Eine VM wird automatisch heruntergefahren, wenn die letzte SSH-Verbindung vor über einer Stunde beendet worden ist.
- ChannelTimeout: Nach dieser Zeit wird ein nicht verwendeter Kanal geschlossen.
- UnusedConnectionTimeout: Nach dieser Zeit wird eine Verbindung geschlossen, die keinen offenen Kanal hat.
Für das zweite Problem habe ich noch keinerlei Vorstellungen, wie ich es lösen könnte. Irgendwie müsste ich herausfinden können, dass eine SSH-Verbindung geschlossen worden ist. Oder ich müsste die Anzahl offener SSH-Verbindungen live monitoren. Ist keine offen, startet ein Timer. Sobald wieder eine geöffnet wird, wird der Timer zurückgesetzt. Solche Sachen lassen sich wunderbar in Go mit Channels und Timern umsetzen. Die Frage ist nur, was ich genau monitoren soll. Gibt es da passende APIs dazu? Oder soll ich Logdaten bzw. das Journal auslesen?
Evtl. könnte man auch irgend eine Art Hook definieren beim Beenden einer Shell-Session. Aber dann müsste ich auch beim Öffnen mitzählen.
Das Monitoring aktiver Login-Shells über Prozesse wäre auch eine Möglichkeit, aber ich müsste dann schon wissen, welche Shells zum Einsatz kommen. So richtig weit komme ich mit keinem Ansatz.
Ich wäre froh um Anregungen!