Abbiamo una workstation che viene utilizzata sporadicamente e sto provando a configurare uno script che lo esegue durante lo spegnimento. Ho creato un LogoutHook in com.apple.loginwindow su uno script di bash a una riga, che attiva un oggetto Applescript che confronta le mie voci di registro per determinare se il backup deve essere eseguito. In caso affermativo, chiama il principale Apple Apples che attiva un processo di backup Chronosync.
Funziona tutto ... tranne che a malapena riesco a avviare il processo di backup prima che il Mac lo interrompa e si chiuda. Suppongo che vengano emessi SIGTERM e SIGKILL e tutti i processi si adeguino rapidamente.
Ho anche esaminato il modo "corretto" di farlo con launchd (dato che LogoutHooks è deprecato). Launchd in realtà non supporta i processi di pianificazione al momento dell'arresto: richiede l'avvio dello script all'accesso, in attesa / in attesa di intercettare un SIGTERM. Di nuovo, questo pone il problema che l'intero sistema si sta spegnendo in pochi secondi, dallo stack di rete al demone Chronosync.
La pagina man per il comando shutdown dice anche:
Upon shutdown, all running processes are sent a SIGTERM followed by a SIGKILL. The SIGKILL will follow the SIGTERM by an intentionally indeterminate period of time. Programs are expected to take only enough time to flush all dirty data and exit.
C'è un modo per ritardare lo spegnimento fino a quando i miei script non sono stati completati? Idealmente voglio lo stesso comportamento dell'aggiornamento software di Apple, che impiega tutto il tempo necessario per installare gli aggiornamenti al momento del logout, prima di consentire l'arresto della macchina.