2011-01-06 11:24:35 +0000 2011-01-06 11:24:35 +0000
56
56

Eseguire il comando all'avvio / login (Mac OS X)

Mi stavo chiedendo in quale file dovrei mettere questo comando bash in modo che venga eseguito all'avvio.

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

Ho setacciato la rete e penso che sia tra ~/.bashrc, ~/profile, /etc/bashrc, /etc/profile o ~/.bash_profile. Anche se ho provato questi e sembrano funzionare all'avvio del terminale non all'avvio del Mac. Mi manca un file?

Risposte (8)

60
60
60
2011-01-06 12:50:04 +0000

Per eseguire un comando all'avvio su OS X, dovete usare launchd.

Se non vuoi usare Lingon , devi creare un elenco di proprietà launchd. Questo è un file XML, quindi puoi farlo con il tuo editor di testo preferito o in alternativa puoi usare il Property List Editor che è installato con i Dev Tools di Mac OS X. Crea quanto segue:

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

Salva questo in /Library/LaunchAgents/some.meaningful.name.plist (avrai bisogno di un account di amministratore e/o sudo), poi apri un terminale e fai:

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

Questo farà sì che launchd carichi l'elemento che farà partire MongoDB all'avvio. Come bonus, launchd lo monitorerà e, se esce per qualsiasi motivo, verrà riavviato. Per sbarazzarsi dell'elemento basta sostituire load nel comando precedente con unload.

51
51
51
2012-08-23 18:09:02 +0000

Un'altra semplice soluzione da Stack Overflow : Puoi:

  • Avviare Automator.app;
  • Selezionare “Application”;
  • Cliccare “Show library” nella barra degli strumenti (se nascosta);
  • Aggiungere “Run shell script” (da Actions/Utilities);
  • Copiare e incollare il tuo script nella finestra;
  • Testarlo;
  • Salvarlo da qualche parte: verrà creato un file chiamato your_name.app);
  • A seconda della tua versione MacOSX:
  • Vecchie versioni: Vai in Preferenze di Sistema → Account → Elementi di accesso, o
  • Nuova versione: Vai in Preferenze di sistema → Utenti e gruppi → Elementi di accesso (in alto a destra);
  • Aggiungi questa app appena creata;

Esci, accedi di nuovo, e dovresti aver finito. ;)

35
35
35
2011-01-06 11:37:23 +0000

Ufficialmente nessuno di questi. Il modo suggerito da Apple è di usare launchd . Le guide per impostarlo includono lingon e Launch Control

Per quanto riguarda i file che menzioni, quelli nella home directory ~/.bashrc, ~/profile, ~/.bash_profile sono avviati solo quando fai login tramite un terminale. Quelli in /etc vengono eseguiti dalla shell iniziando per tutti gli utenti prima di quelli nella home directory ma solo quando viene effettuato il login da un utente. bash manual

Lo script di avvio Unix coinvolgeva /etc/rc* ma per OSX basta usare la roba di launchd

30
30
30
2015-11-03 17:53:47 +0000

Per lanciare i comandi quando si effettua il login, si può fare così:

  • Crea un file di testo contenente i tuoi comandi (script bash):

  • Salva questo file in ~/Library/Startup.cmd

  • Puoi testarlo facendo doppio clic sul file nel Finder

  • Rendilo eseguibile: chmod +x ~/Library/Startup.cmd

  • Aggiungi questo file in Preferenze di sistema > Accounts > Elementi di accesso

3
3
3
2016-03-24 19:58:03 +0000

Se vuoi un approccio che funzioni su Linux e Mac OS X, un compito cron dovrebbe essere sufficiente (modifica i tuoi compiti cron eseguendo crontab -e):

@reboot /path/to/script

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

3
3
3
2011-01-06 11:32:48 +0000

Dovrai guardare come funzionano launchd e launchctl su MacOS. Potresti iniziare leggendo le pagine man di entrambi i comandi. Potresti poi guardare all'interno di /Library/LaunchAgents/ e /Library/LaunchDaemons/ per esempi di come impostare le applicazioni da caricare in tempi diversi attraverso l'interfaccia launchctl. Ecco un esempio che ho trovato su Stack Overflow che potrebbe aiutarti ulteriormente.

0
0
0
2018-05-22 16:37:28 +0000

Ero interessato a una risposta unix molto semplice a questo problema e l'ho trovata in un altro sito . Ecco un riassunto della soluzione.

Lo standard per le shell di login è di cercare sempre i file di configurazione bash con “profilo” nel nome, in questo ordine: /etc/profile, ~/.bash\profile, poi ~/.bash\login e infine ~/.profile. Quando le shell di login escono, leggono ~/.bash_logout.

Nel mio caso ho solo creato il ~/.bash_profile e poi ho aperto le preferenze dell'applicazione Mac Terminal e ho cambiato l'opzione “Shell opens with” da default a /bin/bash. Questo è tutto. Pulito e semplice.

-3
-3
-3
2017-03-11 07:25:05 +0000

aprire il terminale, digitare

nano ~/.bash_profile

poi aggiungere questo testo al file:

/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork logpath /usr/local/mongo/log