#!/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'])