ogclone-engine/ogclient/scripts/poweroff

75 lines
1.9 KiB
Python

#!/usr/bin/python3
import os
import sys
import shutil
import time
import subprocess
import ogGlobals
from SystemLib import ogGetCaller, ogEcho
from DiskLib import ogDiskToDev
from FileSystemLib import ogUnmountAll
from CacheLib import ogUnmountCache
DEVICE = os.environ.get ('DEVICE', '')
ogstatus = os.environ.get ('ogstatus', '')
PROG = os.path.basename (sys.argv[0])
is_reboot = 'reboot'==PROG
TIME = None
try:
TIME = int (sys.argv[1])
except:
pass
# Registrar ejecución manual de script.
c = ogGetCaller()
if c in ['browser', 'OGBrowser', 'bash']:
ogEcho ('log', 'info', f'Script: {PROG}')
# Cargamos el valor por defecto del tiempo de sleep
if TIME:
print (f'[5] Se ha introducido un retardo de {TIME} segundos para reiniciar')
else:
TIME = ogGlobals.OGSLEEP
print (f'[5] No se ha introducido un retardo, {TIME} segundos para reiniciar')
# No registrar errores.
#DEBUG=no
# Desmontar los sistemas de archivos y la caché local.
print ('[10] Desmontar todos los sistemas de archivos.')
subprocess.run (['sync'])
ndisks = len (ogDiskToDev())
for d in range (1, ndisks+1):
ogUnmountAll (d)
print ('[50] Desmontar cache local.')
ogUnmountCache()
# Volver a registrar errores.
#DEBUG=yes
if is_reboot:
print ('[90] Reiniciar el equipo.')
else:
print ('[70] Apagando el equipo.')
# Estado correcto de Wake-On-Lan antes de apagar.
subprocess.run (['ethtool', '-s', DEVICE, 'wol', 'g'], stderr=subprocess.DEVNULL)
# Detectar Busybox.
BUSYBOX = shutil.which ('busyboxOLD')
if not BUSYBOX: BUSYBOX = shutil.which ('busybox')
# Retardo para dar lugar al registro en cola de acciones.
time.sleep (TIME)
# Parar Browser para evitar "cuelgues".
if 'offline' != ogstatus:
subprocess.run (['killall', 'QtWebEngineProcess', 'OGBrowser', 'i3', 'sway', 'Xorg', 'startx'], stderr=subprocess.DEVNULL)
# Apagar.
if is_reboot:
subprocess.run ([BUSYBOX, 'reboot'])
else:
subprocess.run ([BUSYBOX, 'poweroff'])