- How to run script on startup using systemd in Linux
- Step 1: Overview on systemd
- Step 2: Create Sample Script
- Executing Commands and Scripts at Reboot & Startup in Linux
- Method 1 – Using rc.local
- Method 2 – Crontab method
- Shusain
- Trying to Beta Test Your New App? Consider These Helpful Tips For Success
- NC command (NCAT) for beginners
- 15 Comments
- How to automatically run program on Linux startup
- Automatically run program on Linux startup via systemd
- Automatically run program on Linux startup via cron
- Automatically run program on Linux startup via rc.local
- Automatically run program on GNOME startup
- Automatically run program on KDE startup
- Automatically run program on new Bash session
How to run script on startup using systemd in Linux
Table of Contents
In this article I will share a sample systemd unit file which you can use to run script at startup with systemd without using crontab in RHEL/CentOS 7/8 Linux.
Some more articles on similar topic:
- How to execute a command or script with systemd at shutdown only and not at reboot in Linux
- How to execute a command or script with systemd right before login prompt appears on terminal in Linux
- How to execute a command or script at system startup using systemd without using cronjob in Linux
- How to execute a command or script after N minutes of boot up (system startup) with systemd in Linux
- How to halt system reboot or shutdown and read user input during boot up stage in Linux
- How to execute a command or script using systemd right before shutdown happens in Linux
- How to run a service as a specific user or group using systemd in Linux
There can be various scenarios when you expect a script or command to be called at startup such as
- Execute a script after waiting for N minutes of startup
- Execute a script after all the systemd services are loaded
- Execute a script immediately after login prompt appears
- Execute a script just before the login prompt appears
In this article I will cover below two topics as they are almost similar
- Run script at startup with systemd after network is reachable
- Execute script at starup after all the systemd services are loaded
I will be using CentOS/RHEL 7/8 Linux node to verify the steps from this article to run script with systemd right before login prompt.
Step 1: Overview on systemd
I hope you are already familiar with below topics
Step 2: Create Sample Script
Now to run script at startup with systemd firstly we need a script or command. For the sake of this article I have create a dummy shell script /tmp/startup_script.sh which we will use for testing this article.
This script will continue to run for 5 minutes and will print an echo statement on the screen every minute as a broadcast message using wall command for all Linux users on the respective node. And at the end of 5th minute it will print a completed broadcast. With this we can also make sure that the script is not killed by systemd if it continues to run for 5 minutes .
Provide executable permission to the script
Enable the service to make sure this is called automatically after reboot
Источник
Executing Commands and Scripts at Reboot & Startup in Linux
There might arise a need to execute a command or scripts at reboot or every time when we start our system. So how can we do that, in this tutorial we are going to discuss just that. We will discuss how we can make our CentOS/RHEL and Ubuntu systems to execute a command or scripts at reboot or at system startup using two different methods. Both the methods are tested and works just fine,
Method 1 – Using rc.local
In this method, we will use ‘rc.local’ file located in ‘/etc/’ to execute our scripts and commands at startup. We will make an entry to execute the script in the file & every time when our system starts, the script will be executed.
But we will first provide the permissions to make the file /etc/rc.local executable,
$ sudo chmod +x /etc/rc.local
Next we will add the script to be executed in the file,
$ sudo vi /etc/rc.local
& at the bottom of file, add the entry
sh /root/script.sh &
Now save the file & exit. Similarly we can execute a command using rc.local file but we need to make sure that we mention the full path of the command. To locate the full command path, run
$ which command
$ which shutter
/usr/bin/shutter
For CentOS, we use file ‘/etc/rc.d/rc.local’ instead of ‘/etc/rc.local’. We also need to make this file executable before adding any script or command to the file.
Note:- When executing a script at startup, make sure that the script ends with ‘exit 0’.
Method 2 – Crontab method
This method is the easiest method of the two methods. We will create a cron job that will wait for 90 seconds after system startup & then will execute the command or script on the system.
To create a cron job, open terminal & run
$ crontab -e
& enter the following line ,
@reboot ( sleep 90 ; sh /location/script.sh )
where /location/script.sh is the location of script to be executed.
So this was our tutorial on how to execute a script or a command when system starts up. Please leave your queries, if any , using the comment box below.
If you think we have helped you or just want to support us, please consider these :-
Linux TechLab is thankful for your continued support.
Share Article:
Shusain
Passionate about Linux & open source. Loves to learn, read & write about Linux as well as new technologies.
Trying to Beta Test Your New App? Consider These Helpful Tips For Success
NC command (NCAT) for beginners
15 Comments
Hello, are the slahes and backslashes correct?
@reboot ( sleep 90 ; sh \location\script.sh )
or
@reboot ( sleep 90 ; sh /location/script.sh )
Thanks for pointing out , it should be ‘/location/script.sh’.
Updating the article.
Hi, Thanks for this helpful information.
I’ve installed TightVNC on my (headless) file server which is running Ubuntu 18.04 LTS 64bit.
I start the vnc server with,
$ vncserver -geometry 1280×720 -depth 24
New ‘X’ desktop is krt1293:1
Starting applications specified in /home/bob/.vnc/xstartup
Log file is /home/bob/.vnc/krt1293:1.log
OK.
I’m accessing it from my main PC (Xubuntu 16.04 LTS 64bit) using Reminna.
I run,
$ ssh -L 5901:localhost:5901 -N -f -l USER IP
I then am able to connect using Remmina with settings,
Protocol: VNC – Virtual Network Computing
Server: localhost:5901
The connection is established and all is working OK to this point.
I then decided to setup so vncserver is started at bootup using a crontab.
Opened user crontab file with,
$ crontab -e
Added the following line at the bottom and saved,
@reboot sleep 90 ; sh /location/script.sh
Rebooted – cron failed to start vncserver
Edited the following line at the bottom and saved,
@reboot sleep 90 ; sh /location/script.sh
Rebooted – cron failed to start vncserver
Edited the following line at the bottom and saved,
@reboot (vncserver -geometry 1280×720 -depth 24 :1)
Rebooted – cron failed to start vncserver
Edited the following line at the bottom and saved,
@reboot ( vncserver -geometry 1280×720 -depth 24 :1 )
Rebooted – cron failed to start vncserver
I added a new job to the crontab to confirm that the crontab is being executed at startup,
@reboot ( touch /home/bob/tmp/cron_test )
The “vncserver” crontab failed, but the “touch” crontab was successful. Any thoughts on what I’m doing wrong?
Harry
Try again with full path to vncserver i.e. ‘/usr/bin/vncserver’. In the meanwhile i will try to replicate it on one of my machines.
I have to activate my wifi hardware each time that I reboot my system with this command ’sudo modprobe -v b43’ and I am looking to make this task easier, do you think that I can give sudo privileges?
thanks for your time and help
A quick Google search with “Persistent Module Loading” as search terms will give you the solution you need.
Also i will be posting an article for the same in coming weeks.
i need to run qt exicutble file in auto boot
crontab -e
@reboot /home/ssbc/Desktop/layout1
layout1 is qt exe file
Hi, how do you exit the crontab editor?
:wq, like we exit out in vi/vim editor.
If the script.sh file is executable, is the sh command necessary?
Would @reboot ( sleep 90 ; /location/script.sh ) work?
I need to run a script at startup, the script is located in root directory and in crontab I have added the line @reboot /root/vm_subnet.sh
but it does not run the script at reboot or startup (i guess they are both the same from a boot-up cycle POV). Am I doing something wrong here? Any syggestions?
crontab is user-dependent / user-based. Does your user have root access?
Its user dependent but to be able run scripts on startup you should have root access.
crontab is user-dependent / user-based. Does your user have root access?
Its user dependent but to be able run scripts on startup you should have root access.
Источник
How to automatically run program on Linux startup
There are a few stages of Linux startup, and you can set your own autostart script or program at any of the stages where it could be a single command, a chain of commands, or an executable shell script. There could be, however, some differences in startup procedure between different Linux distributions and versions.
Modern Linux will first boot into systemd while older versions of Linux uses System V init. Both methods will run cron and rc.local before the desktop environment such as GNOME or KDE is loaded. On the other hand, server-based Linux distributions will run the default shell such as Bash after the user logged in at the console instead of loading the desktop environment.
Methods to automatically run program on Linux startup:
Automatically run program on Linux startup via systemd
systemd is the standard system and service manager in modern Linux. It is responsible for executing and managing programs during Linux startup, among many other things. Compatible programs will provide service unit files used by systemd to manage the program’s execution.
You can configure systemd to run programs automatically during Linux startup following these steps:
You’ll have to create your own service unit if it’s a custom program or if your program doesn’t come with one during installation
Related: Creating and modifying systemd unit files
enabled service unit is executed during boot
Automatically run program on Linux startup via cron
cron is a daemon to execute scheduled commands. The commands are stored in the cron job table or crontab and are unique for each user in the system. It’s started during system boot either by systemd or System V init, and you can schedule your job or program to be executed right during the system boot itself by following these steps:
You’re required to select an editor for the crontab if this is the first time the user uses the command.
A crontab will be created for the user running the command and will be executed using the privileges of the user. If you need your program to run as the root user, run crontab -e as the root user itself.
@reboot defines the job to be executed during system boot.
Use full path for your programs when possible and write your commands in a single line.
The file is saved in /var/spool/crontab/
Automatically run program on Linux startup via rc.local
rc.local is a legacy from the System V init system. It is the last script to be executed before proceeding to a login screen for the desktop environment or a login prompt at the terminal. It’s usually a Bash shell script, and you can run anything from the script.
You can configure your rc.local script following these steps:
It must start with interpreter (/bin/bash) and ends with an exit code (0 is for success)
The file will be executed as the root user during system boot
Automatically run program on GNOME startup
GNOME is the default desktop environment for Linux distributions such as Ubuntu and Red Hat. GNOME can be configured to run programs when a user logs in and can be configured by following the below article:
Automatically run program on KDE startup
KDE is another popular desktop environment for Linux and is the default in Kubuntu and openSUSE. It can easily be configured to run programs when a user logs in as detailed in the following article:
Automatically run program on new Bash session
A new shell program will be spawned when you start your terminal session. Bash is the default shell for most Linuxdistributions, and when started, it will look for the following files in the particular order and executes them.
These files contains commands and logics to set up proper environment variables and run required programs in Bash language. It’s also configured to normally execute other files such as /etc/bashrc, /etc/bash.bashrc and
You can edit any of these files to run your program when a Bash session is started. Below is a part of a typical
Comment anonymously. Login not required.
Источник