10.11.3 - launchd para iniciar un trabajo al inicio o en el momento del día

2

Estoy intentando usar launchd para que SelfControl esté activo de 8 am a 8 pm. Mi primer intento fue simplemente usar launchd y tener un pequeño script de bash que inicia el autocontrol (durante 12 horas) a las 8 am, pero esto no es lo suficientemente flexible porque si mi computadora portátil está apagada a las 8 am, obviamente no pasa nada.

¿Algún consejo sobre una mejor manera de abordar este problema o modificar mi enfoque actual?

Aquí está el .plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" \
 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
     <string>my.selfControlScheduler</string>
  <key>Program</key>
     <string>/Users/ira/Documents/coding/self_control/sc_sched.sh</string>
  <key>StartCalendarInterval</key>
     <dict>
     <key>Hour</key>
     <integer>8</integer>
     <key>Minute</key>
     <integer>0</integer>
     </dict>
</dict>
</plist>

Y aquí está el guión de bash

sudo /Applications/SelfControl.app/Contents/MacOS/org.eyebeam.SelfControl $(id -u $(whoami)) --install

El período de tiempo para bloquear la lista negra en Autocontrol se puede establecer haciendo

defaults write org.eyebeam.SelfControl "BlockDuration"=xxx

Creo que esa es toda la información relevante

    
pregunta ira 22.02.2016 - 16:42

1 respuesta

1

Debería poder controlar esto con dos trabajos diferentes de launchd.

  • un trabajo para comenzar diariamente a las 8 am
  • otro trabajo para descargar el primero al momento de salir (8 pm)

Si la aplicación no espera ser cargada / descargada (como lo hace mongodb si la instala desde Homebrew), cambie la segunda secuencia de comandos para llamar a su secuencia de comandos "kill".

Creo que solo debo llamar a /usr/bin/killall SelfControl si eso funciona en lugar de cagarlo con un ejemplo de AppleScript en modo complejo con /usr/bin/osascript como en el ejemplo aquí :

/usr/bin/osascript -e 'tell application "Mathematica" to quit'

Esto es mucho más robusto que hacer un script de ayuda que necesita seguir funcionando ya que launchd mantiene un registro del tiempo que pasa cuando está apagado y / o durmiendo y debe disparar las cosas más tarde (por ejemplo, 23:30) si se despierta el Mac desde el sueño a partir de las 6 pm.

Utilizo LaunchControl o Lingon para administrar mis archivos plist, pero también puedes hacerlos rodar como tu pregunta.

El segundo es más corto, así que lo nombré org.you.control.unload y simplemente llama a launchctl unload org.you.control.load a las 20:00 y configuro RunAtLoad a /false para que solo se active por el reloj.

<dict>
    <key>Label</key>
    <string>org.you.control.unload</string>
    <key>ProgramArguments</key>
    <array>
        <string>launchctl</string>
        <string>unload</string>
        <string>org.you.control.load</string>
    </array>
    <key>RunAtLoad</key>
    <false/>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>20</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>

Simplemente decida los nombres que desea: org.you.control.load o ** my.selfControlScheduler ** están bien, pero elija un idioma y manténgalo así durante todo el proceso.

Su inicio de sesión se ve bien, pero podría haber permisos u otros problemas que una herramienta para depurar cosas sin necesidad de una referencia útil como enlace

En lugar de escribir la apertura de la aplicación, solo llame a /usr/bin/open -a SelfControl sería mi sugerencia si la suya no está funcionando actualmente.

<string>org.you.control.load</string>
<key>ProgramArguments</key>
<array>
    <string>/usr/bin/open</string>
    <string>-a</string>
    <string>SelfControl</string>
</array>
    
respondido por el bmike 08.03.2016 - 23:13

Lea otras preguntas en las etiquetas