I was wondering which file I should place this bash command in so it will be run on startup.
# Start the MongoDB server
/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/logI have been scouring the net and think it is between ~/.bashrc, ~/profile, /etc/bashrc, /etc/profile or ~/.bash_profile. Although I have tried these and they seem to run on terminal startup not Mac startup. Am I missing a file?
10 Answers
Officially none of these. The Apple suggested way is to use launchd. Guis to set this up include lingon and Launch Control
As for the files you mention the ones in the home directory ~/.bashrc, ~/profile, ~/.bash_profile are only started when you login via a terminal. The ones in /etc are run by the shell starting for all users before the ones in home directory but only when a user login is made.. bash manual
The Unix startup script involved /etc/rc* but for OSX just use the launchd stuff
5Another simple solution from Stack Overflow: You can:
- Start Automator.app;
- Select "Application";
- Click "Show library" in the toolbar (if hidden);
- Add "Run shell script" (from the Actions/Utilities);
- Copy-and-paste your script into the window;
- Test it;
- Save it somewhere: a file called
your_name.appwill be created); - Depending your MacOSX version:
- Old versions: Go to System Preferences → Accounts → Login items, or
- New version: Go to System Preferences → Users and Groups → Login items (top right);
- Add this newly-created app;
Log off, log back in, and you should be done. ;)
9To run a command on start up on OS X, you need to use launchd.
If you don't want to use Lingon, you need to create a launchd Property List. This is an XML file, so you can do it with your favourite text editor or alternatively you can use the Property List Editor that's installed with the Mac OS X Dev Tools. Create the following:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "">
<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>Save this in /Library/LaunchAgents/some.meaningful.name.plist (you will need an administrator account and/or sudo), then open a terminal and do:
sudo launchctl load /Library/LaunchAgents/some.meaningful.name.plistThis will cause launchd to load the item which will cause it to start MongoDB on boot. As a bonus, launchd will monitor it and, if it exits for any reason, it will be re-started. To get rid of the item simply replace load in the above command with unload.
To launch commands when logging in, you can do this:
Create a text file containing your commands (bash script):
#!/bin/bash # Start the MongoDB server /Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork --logpath /usr/local/mongo/logSave this file in
~/Library/Startup.cmd- You can test it by double-clicking the file in the Finder
- Make it executable:
chmod +x ~/Library/Startup.cmd - Add this file in System Preferences > Accounts > Login items
If you want an approach that will work on Linux & Mac OS X, a cron task should should be sufficient (edit your cron tasks by executing crontab -e):
@reboot /path/to/script(credits: )
3You will have to look at how launchd and launchctl work on MacOS. You could start by reading the man pages for both the commands. You could then look inside /Library/LaunchAgents/ and /Library/LaunchDaemons/ for examples of how to set up applications to load at different times through the launchctl interface.
Here's an example I found on Stack Overflow that might help you further.
0I was interested in a very simple unix answer to this problem and found it at another site. Here is a summary of the solution.
The standard for login shells is to always look for the bash configuration files with "profile" in the name, in this order: /etc/profile, ~/.bash_profile, then ~/.bash_login and lastly ~/.profile. When login shells exit, they read ~/.bash_logout.
In my case I just created the ~/.bash_profile and then I opened the preferences for the Mac Terminal app and changed the "Shell opens with" option from default to /bin/bash. That's it. Clean and simple.
0You could use crontab:
First, create a script somewhere (let's say /path/to/script.sh) and type the command you wanted to run there. Then type chmod +x /path/to/script.sh.
Now, in the Terminal:
EDITOR=nano crontab -eYou will be presented with a text editor in the terminal.
Type in the file:
@reboot /path/to/script.shHit Ctrl + X, hit y, and hit enter, and on the next boot, this will run!
If you wanted to run a command in the background, simply add an & after the command in the script.
Although I do not find the answers that are asking you to add the call in .bash_profile or .bashrc acceptable, they could work imho.
You could right click on your Terminal Icon when on Dock, Select Options > Open at login.
I have an auto-login VPN script for work. I need to open Terminal too when working. So I prefer it automatically launches at startup and I used .bashrc to run my vpn script automatically.
2open terminal, type
nano ~/.bash_profilethen add this text to the file:
/Applications/MongoDB/bin/mongod --dbpath /usr/local/mongo/data --fork logpath /usr/local/mongo/log 1