what is the best way to start a script in boot time on linux

13,152

There are a couple of ways to achieve this, but you will need root privileges for any the following. To get root, open a terminal and run the command:

sudo su

and the command prompt will change to '#' indicating that the terminal session has root privileges.

Alternative #1. Add an initscript

Create a new script in /etc/init.d/myscript:

vi /etc/init.d/myscript

(Obviously it doesn't have to be called "myscript".) In this script, do whatever you want to do. Perhaps just run the script you mentioned:

#!/bin/sh
/path/to/my/script.sh

Make it executable:

chmod ugo+x /etc/init.d/myscript

Configure the init system to run this script at startup:

update-rc.d myscript defaults

Alternative #2. Add commands to /etc/rc.local

vi /etc/rc.local

with content like the following:

# This script is executed at the end of each multiuser runlevel
/path/to/my/script.sh || exit 1   # Added by me
exit 0

Alternative #3. Add an Upstart job

Create /etc/init/myjob.conf:

vi /etc/init/myjob.conf

with the following content:

description "my job"
start on startup
task
exec /path/to/my/script.sh

BTW:

You don't need to be root if you can edit your crontab (crontab -e) and create an entry like this:

@reboot /path/to/script.sh

This way, you can run it as a regular user. @reboot just means it's run when the computer starts up (not necessarily just when it's rebooted).

Share:
13,152
Hirshberg
Author by

Hirshberg

Senior Cloud Native Field Engineer at VMWare -Kubernetes -Jenkins -Security -Linux -GOlang

Updated on June 05, 2022

Comments

  • Hirshberg
    Hirshberg almost 2 years

    I want to start a script I have on when the system start and looking for the best way, my way is:

    • vi /etc/systemd/system/myscript.service

      [Service]
      Type=simple
      ExecStart=/usr/bin/myscript
      CPUSchedulingPolicy=rr
      CPUSchedulingPrioty=27
      [Install]
      WantedBy=multi-user.target graphical.target
      
    • systemctl daemon-reload; systemctl enable myscript; systemctl start rmyscript

    it's working good but just wondered if there another and better way.