8 votes

Exécuter script en tant que Root au démarrage - MacOS 10.12 Sierra

J'ai tout essayé et je n'arrive pas à faire en sorte que mon script s'exécute au démarrage. Modifier le .bashrc, le .bash_profile, etc. ne m'a mené nulle part. J'ai ensuite essayé les cron jobs, sans succès. Ensuite, je me suis arraché les cheveux en essayant d'utiliser la fonction launchd. J'ai créé un démon de lancement, qui est prétendument la fonction Root, mais ça n'a rien donné non plus. Comme dernier essai, j'ai même essayé Automator, sans succès.

Le fichier que je veux exécuter en tant que Root est le suivant : "/Users/CURRENT_USER/Dev/my_script.sh"

Voici ce que j'ai dans mon dossier LaunchDaemons :

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

6voto

klanomath Points 63400

A ~/Library/LaunchDaemons n'existe pas. Un démon de lancement dans /Library/LaunchDaemons est déjà exécuté avec les privilèges Root, vous pouvez donc omettre la partie UserName.

Mettez donc votre shell script mon_script.sh dans /usr/local/bin/ ou dans /usr/bin/ (ajustez le chemin dans le tableau ProgramArguments si vous utilisez ce dernier), rendez-le exécutable avec sudo chmod +x ... et appartenant à Root:wheel avec sudo chown root:wheel ... . /usr/bin est recommandé si brew est installé.

Modifiez votre plist actuel pour :

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

Enregistrez le démon de lancement sous le nom de com.startup.script.plist dans /Library/LaunchDaemons/ et appartenant à Root:wheel.

Lancez-le avec :

sudo launchctl load /Library/LaunchDaemons/com.startup.script.plist

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X