10.11.3 - launchd per avviare un lavoro all'avvio o all'ora del giorno

2

Sto tentando di utilizzare launchd per avere SelfControl attivo dalle 8:00 alle 20:00. Il mio primo tentativo è stato quello di usare solo launchd e avere un piccolo script bash che inizia l'autocontrollo (per 12 ore) alle 8 del mattino, ma questo non è abbastanza flessibile perché se il mio portatile è spento alle 8 del mattino ovviamente non succede nulla.

Qualche consiglio su un modo migliore per affrontare questo problema o modificare il mio approccio attuale?

Ecco il .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>

Ed ecco lo script di bash

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

Il tempo per bloccare la blacklist in SelfControl può essere impostato facendo

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

Penso che siano tutte le informazioni rilevanti

    
posta ira 22.02.2016 - 16:42
fonte

1 risposta

1

Dovresti essere in grado di controllarlo con due diversi lavori di avvio.

  • un lavoro per iniziare ogni giorno alle 8 del mattino
  • un altro lavoro per scaricare il primo al momento della chiusura (8 pm)

Se l'applicazione non si aspetta di essere caricata / scaricata (come fa mongodb se la installi da homebrew), quindi cambia il secondo script per chiamare il tuo script "kill".

Sono dell'idea di chiamare semplicemente /usr/bin/killall SelfControl se questo funziona piuttosto che mescolare con il wrapping di un esempio di AppleScript contorto in modalità con /usr/bin/osascript come nell'esempio qui :

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

Questo è molto più robusto rispetto al fare uno script di aiuto che deve rimanere in esecuzione dal momento che launchd tiene traccia del tempo che passa quando spenti e / o dorme e dovrebbe sparare più tardi (ad esempio 23:30) se ti svegli il Mac dal sonno inizia alle 18:00.

Uso LaunchControl o Lingon app per gestire i miei file plist - ma puoi anche darli a mano come la tua domanda.

Il secondo è più breve, quindi l'ho chiamato org.you.control.unload e chiama semplicemente launchctl unload org.you.control.load alle 20:00 e imposta RunAtLoad su /false , quindi si innesca solo per l'orologio.

<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>

Decidi solo i nomi che desideri: org.you.control.load o ** my.selfControlScheduler ** sono entrambi soddisfacenti, ma scegli un idioma e rimani fedele.

Il tuo avvio plist sembra buono ma potrebbero esserci permessi o altri problemi che uno strumento per eseguire il debug delle cose senza bisogno di un utile riferimento come link

Invece di sceneggiare l'apertura dell'app, chiama il /usr/bin/open -a SelfControl sarebbe il mio suggerimento se il tuo non funziona al momento.

<string>org.you.control.load</string>
<key>ProgramArguments</key>
<array>
    <string>/usr/bin/open</string>
    <string>-a</string>
    <string>SelfControl</string>
</array>
    
risposta data 08.03.2016 - 23:13
fonte

Leggi altre domande sui tag