Esegui lo script come root all'avvio - macOS 10.12 Sierra

4

Ho provato tutto e non riesco a far funzionare il mio script all'avvio. Modificando il file .bashrc, .bash_profile, ecc., Quella via non mi ha permesso dove. Poi ho provato i cron job, senza fortuna. Poi mi sono tirato i capelli cercando di usare la funzione launchd. Ho creato un demone di lancio, che è presumibilmente le funzioni di root, ma non è neanche una fortuna. Come ultimo tentativo, ho persino provato Automator senza fortuna.

Il file che voglio eseguire come root è: "/Users/CURRENT_USER/Dev/my_script.sh"

Ecco cosa ho nella mia cartella LaunchDaemon:

<?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>com.startup.script</string>
    <key>LaunchOnlyOnce</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>-c</string>
        <string>/Users/CURRENT_USER/Dev/my_script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>UserName</key>
    <string>root</string>
</dict>
</plist>
    
posta TekBoi 08.07.2017 - 22:15
fonte

1 risposta

3

A ~ / Library / LaunchDaemons non esiste. Un daemon di avvio in / Library / LaunchDaemons è già stato eseguito con i privilegi di root in modo da poter omettere la parte UserName.

Quindi metti lo script di shell my_script.sh in / usr / local / bin / o in / usr / bin / (aggiusta il percorso nell'array ProgramArguments se usi quest'ultimo), rendilo eseguibile con sudo chmod +x ... e posseduto per radice: ruota con sudo chown root:wheel ... . / usr / bin è raccomandato se brew è installato.

Modifica il tuo plist corrente su:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.startup.script</string>
    <key>LaunchOnlyOnce</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>sh</string>
        <string>-c</string>
        <string>/usr/local/bin/my_script.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Salva il daemon di avvio come com.startup.script.plist in / Library / LaunchDaemons / e di proprietà di root: wheel.

Avvia con:

sudo launchctl load /Library/LaunchDaemons/com.startup.script.plist
    
risposta data 09.07.2017 - 01:30
fonte

Leggi altre domande sui tag