Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I was wondering how to run scripts when my computer starts up so I don't have to run scripts manually that I always run?

share|improve this question
    
If someone could also show both WHEN and WHERE that would be awesome. I say this because I know there are at least 2 ways to start a script that will fire before other applications have been started (like X11) –  Buttink Aug 4 '10 at 20:20

9 Answers 9

up vote 45 down vote accepted

Depending on what sort of scripts you need to run.. For services and the like you should use upstart. But for a user script these should be launched as session scripts by gnome! Have a look under System > Preferences > Startup Applications.

On a side note if you need some scripts to be run on terminal login you can add them to the .bash_login file in you home directory.

share|improve this answer
18  
Considering how SO and StackExchange runs, could you give an example of an upstart script and where it would be placed? That would make this a much better answer. Your link says it's not being maintained and to look at the upstart cookbook, which is huuuge. I don't have too much of an idea where to start. –  Ehtesh Choudhury Feb 4 '13 at 4:03
    
@Shurane More details on upstart are available in Riccardo's answer. –  user10962 Sep 12 '13 at 20:10

One approach is to add an @reboot cron task.

Running crontab -e will allow you to edit your cron.

Adding a line like this to it:

@reboot /path/to/script

will execute that script once your computer boots up.

share|improve this answer
16  
The @reboot keyword is a nice tip because it is not widely known. –  jathanism Aug 11 '10 at 13:39
3  
Nice. Any idea exactly when this triggers? –  Oli Feb 2 '11 at 13:54
1  
So... this wouldn't run if I lost power and the PC turned again when power is restored? –  Mike Wills Jun 21 '12 at 19:27
6  
@siamii: man 5 crontab says that @reboot is executed on startup (when cron daemon is started). –  J.F. Sebastian Mar 29 '13 at 16:04
1  
This is awesome. So far this seems better than rc.local since the system seems more setup by this point (PATH, etc). It is odd that it is so hard to call something after system startup.. –  Karthik T Oct 10 '13 at 7:17

There are different ways to automatically run commands:

  1. The upstart system will execute all scripts from which it finds a configuration in directory /etc/init. These scripts will run during system startup (or in response to certain events, e.g., a shutdown request) and so are the place to run commands that do not interact with the user; all servers are started using this mechanism.

    You can find a readable introduction to at: http://upstart.ubuntu.com/getting-started.html the man pages man 5 init and man 8 init give you the full details.

  2. A shell script named .gnomerc in your home directory is automatically sourced each time you log in to a GNOME session. You can put arbitrary commands in there; environment variables that you set in this script will be seen by any program that you run in your session.

    Note that the session does not start until the .gnomerc script is finished; therefore, if you want to autostart some long-running program, you need to append & to the program invocation, in order to detach it from the running shell.

  3. The menu option System -> Preferences -> Startup Applications allows you to define what applications should be started when your graphical session starts (Ubuntu predefines quite some), and add or remove them to your taste. This has almost the same purpose and scope of the .gnomerc script, except you don't need to know sh syntax (but neither can you use any sh programming construct).

share|improve this answer
3  
3) "This has almost the same purpose and scope of the .gnomerc script", except .gnomerc apparently runs before loading Unity, and Startup Applications apparently runs after loading Unity. I had to run a program that sits on Unity's menu bar and it made a huge difference in this case! –  That Brazilian Guy Jan 23 '13 at 16:13
    
@ruda.almeida Thanks for pointing that out. The answer was written in the pre-Unity days. –  Riccardo Murri Jan 23 '13 at 16:48

How about adding the command to /etc/rc.local? you'll have to use sudo access though to edit this file.

sudo nano /etc/rc.local
share|improve this answer
2  
This most directly answers the question: how to simply execute some scripts when your system boots. upstart does a more complex task: starts daemon processes. –  Dogweather Aug 7 '13 at 19:01

For simple things you can add a command in System->Preferences->Sessions pointing to the location of your script.

Alternatively you can add it to /etc/init.d/rc.local or make an upstart job if it's a more low level stuff.

Take a look at https://help.ubuntu.com/community/UbuntuBootupHowto for more info

share|improve this answer

You should use upstart for this. Upstart is used for Ubuntu processes that are automatically started. It is an enhanced solution like the old System-V init.d scripts. It also allows you to put in prerequisites to the start of your script (i.e. do you need the network running? etc.)

share|improve this answer

Here is what worked for me. I wanted my script to run after the Unity desktop environment had started.

  1. I wrote a script using ruby and added a shebang #!/usr/bin/env ruby on the first line. Note that it's NOT the usual #!/usr/bin/ruby.
  2. I added execution permissions to the script using chmod +x myscript.rb
  3. Added the script to Startup Applications as described in other answers for this question.
share|improve this answer
    
Shouldn't you use the comment box instead? –  Anwar Shah Sep 9 '13 at 5:22
    
Edited so that it looks like an answer. Other answers in this thread don have the #!/usr/bin/env <interpreter> trick, which made the difference in my case. –  Rafael Vega Sep 9 '13 at 13:41
$HOME/.config/autostart
  • This location contains startup application list.
  • .desktop file can be put here which will be executed on startup.

Sample example for .desktop file:

Putting following .desktop file in $HOME/.config/autostart and given chmod +x:

[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script

Here "</path/to/script>" is replaced with path to your script.sh
(usually recommended to /usr/local/bin so-that can be executed by directly command say myscript replaced with "</path/to/script>").

Sample example of script.sh:

#!/bin/bash
<commands to be executed>
exit

Result: .desktop file will be launched from $HOME/.config/autostart which execute script by Exec=

Hence, You can run your desired shell script at startup!

share|improve this answer

Step 1:

sudo apt-get install openbox 

Step 2:

vim ~/.config/openbox/autostart
xterm &
chmod +x ~/.config/openbox/autostart

Step 3:

On boot you can execute once

share|improve this answer
2  
Won't this work only for an Openbox session? In other words, isn't this answer applicable only when no desktop environment is being used? –  user25656 Oct 5 '13 at 12:44

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.