Potresti prendere in considerazione la possibilità di creare un'applicazione Aplescript Stay-Open che imposta / reimposta il timer di spegnimento in base all'esistenza di un processo in esecuzione. La creazione di un programma di avvio è anche una soluzione praticabile, tuttavia sono ancora traballante sulla sintassi. Il comando "pmset force sleep X" non richiede l'accesso come root, ma le impostazioni vengono ripristinate al riavvio.
Dato che la tua situazione sembra che non sarò in grado di anticipare ogni tua esigenza, disegnerò qualcosa per te.
property LoopTime: 5 --measured in seconds
property normalSleepTimeout: 30 --measured in minutes
property processName: "rsync" --the name of the process you're trying to find
on run
do shell script "pmset force sleep 0" --disables sleep
idle()
end
on idle
if not appIsRunning() then
do shell script ("pmset force sleep " & normalSleepTimeout as string) -- sets sleep to desired idle timeout
quit
end
return
end
on appIsRunning()
--Here's where you need to do the test that an app is running. True needs to mean "the app is running". Store the value to "result" or change the below return statement.
return result
end
Per cose come rsync e processi in background, dovrai ottenere più intelligente e sondare altre funzioni come $ top.
set result to False
if 0 < (count of (do shell script ("top -l 1 | grep" & processName as string))) then
set result to True
end
Si noti che nel caso precedente, la ricerca del solo "rsync" restituirà un falso positivo se rsyncd è in esecuzione perché "rsync" e "rsyncd" corrispondono. Potrebbe essere necessario diventare più complicato se questo non funziona per te.
Se l'applicazione fosse un processo con finestre, utilizzerei quanto segue per determinare cosa è in esecuzione:
tell application "System Events" to set RunningAppNames to name of processes
O per identificatori di bundle (più preciso)
tell application "System Events" to set RunningBundles to bundle identifier of processes
Dimmi di più sul tuo scenario e proverò a scrivere qualcosa di più esatto e con un'interfaccia utente più flessibile.