web-dev-qa-db-fra.com

Exécuter la commande au démarrage/à la connexion (Mac OS X)

Je me demandais dans quel fichier je devrais placer cette commande bash afin qu'elle soit exécutée au démarrage.

# Start the MongoDB server
/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log

J'ai parcouru le net et je pense qu'il se situe entre ~/.bashrc, ~/profile, /etc/bashrc, /etc/profile ou ~/.bash_profile. Bien que j'ai essayé ceux-ci et ils semblent fonctionner sur démarrage du terminal pas Démarrage Mac . Est-ce qu'il me manque un fichier?

49
Wolfy87

Officiellement aucun de ceux-ci. La méthode suggérée par Apple consiste à utiliser launchd . Guis pour mettre en place cela inclut lingon et Launch Control

En ce qui concerne les fichiers que vous mentionnez dans le répertoire de base ~/.bashrc, ~/profile, ~/.bash_profile ne sont démarrés que lorsque vous vous connectez via un terminal. Ceux de/etc sont exécutés par le shell à partir de tous les utilisateurs avant ceux du répertoire de base, mais uniquement lorsqu’un utilisateur se connecte. bash manual

Le script de démarrage Unix impliquait/etc/rc * mais pour OSX, utilisez simplement le truc launchd

32
Mark

Pour exécuter une commande au démarrage sous OS X, vous devez utiliser launchd.

Si vous ne souhaitez pas utiliser Lingon , vous devez créer une liste de propriétés launchd. Comme il s’agit d’un fichier XML, vous pouvez le faire avec votre éditeur de texte favori ou utiliser l’éditeur de liste de propriétés installé avec les outils de développement Mac OS X. Créez ce qui suit:

<?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>some.meaningful.name</string> <!-- org.mongodb.mongodb perhaps? -->

    <key>OnDemand</key>
    <false/>

    <key>UserName</key>
    <string>anAppropriateUser</string>

    <key>GroupName</key>
    <string>anAppropriateGroup</string>

    <key>ProgramArguments</key>
    <array>
            <string>/Applications/MongoDB/bin/mongod</string>
            <string>--dbpath</string>
            <string>/usr/local/mongo/data</string>
            <string>--fork</string>
            <string>--logpath</string>
            <string>/usr/local/mongo/log</string>
    </array>
</dict>
</plist>

Enregistrez ceci dans /Library/LaunchAgents/some.meaningful.name.plist (vous aurez besoin d’un compte administrateur et/ou Sudo), puis ouvrez un terminal et faites:

Sudo launchctl load /Library/LaunchAgents/some.meaningful.name.plist

Cela obligera launchd à charger l'élément, ce qui lui permettra de démarrer MongoDB au démarrage. En prime, launchd le surveillera et, s'il existe, quelle qu'en soit la raison, il sera redémarré. Pour supprimer l’élément, il suffit de remplacer load dans la commande ci-dessus par unload.

56
Scott

Une autre solution simple de Stack Overflow : Vous pouvez:

  • Démarrer Automator.app;
  • Sélectionnez "Application";
  • Cliquez sur "Afficher la bibliothèque" dans la barre d'outils (si masqué);
  • Ajouter "Script d'exécution" (à partir des actions/utilitaires);
  • Copiez et collez votre script dans la fenêtre.
  • Essaye-le;
  • Enregistrez-le quelque part: un fichier appelé your_name.app sera créé);
  • Selon votre version de MacOSX:
    • Old versions: Accédez aux Préférences Système → Comptes → Éléments de connexion, ou
    • Nouveau version: Accédez aux Préférences Système → Utilisateurs et groupes → Éléments de connexion (en haut à droite);
  • Ajoutez cette application nouvellement créée.

Déconnectez-vous, reconnectez-vous et vous devriez avoir terminé. ;)

45
Jaime M.

Pour lancer des commandes lors de la connexion, vous pouvez procéder comme suit:

  • Créez un fichier texte contenant vos commandes (script bash):

    #!/bin/bash
    
    # Start the MongoDB server
    /Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/log
    
  • Enregistrer ce fichier dans ~/Library/Startup.cmd

  • Vous pouvez le tester en double-cliquant sur le fichier dans le Finder.
  • Rendez-le exécutable: chmod +x ~/Library/Startup.cmd
  • Ajouter ce fichier dans Préférences Système> Comptes> Éléments de connexion
25
Geekarist

Vous devrez regarder comment launchd et launchctl fonctionnent sous MacOS. Vous pouvez commencer par lire les pages de manuel pour les deux commandes. Vous pouvez ensuite rechercher à l'intérieur de /Library/LaunchAgents/ et /Library/LaunchDaemons/ des exemples de configuration des applications à charger à différents moments via l'interface launchctl.

Voici un exemple J'ai trouvé sur Stack Overflow qui pourrait vous aider davantage.

3
ayaz

Si vous souhaitez une approche qui fonctionnera sous Linux et Mac OS X, une tâche périodique devrait suffire (modifiez vos tâches périodiques en exécutant crontab -e):

@reboot /path/to/script

(crédits: https://unix.stackexchange.com/questions/49207/how-do-i-set-a-script-that-it-will-run-start-up-in-freebsd )

3
Sridhar-Sarnobat

J'étais intéressé par une réponse unix très simple à ce problème et je l'ai trouvé sur un autre site . Voici un résumé de la solution.

La norme pour les shells de connexion est de toujours rechercher les fichiers de configuration bash avec le nom "profile", dans cet ordre:/etc/profile, ~/.bash_profile, puis ~/.bash_login et enfin ~/.profile. Lorsque les shells de connexion sont fermés, ils lisent ~/.bash_logout.

Dans mon cas, je viens de créer le fichier ~/.bash_profile, puis j'ai ouvert les préférences de l'application Mac Terminal et modifié l'option "Shell s'ouvre avec" de l'option par défaut en/bin/bash. C'est tout. Propre et simple.

0
markgp