paint-brush
How to Run Scripts on Boot in Linux Using Systemdby@zt4ff
14,749 reads
14,749 reads

How to Run Scripts on Boot in Linux Using Systemd

by Kayode OluwasegunApril 29th, 2022
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

In this article, we will configure our Linux computer to autorun a script on boot. For the purpose of this article, we will be making use of `systemd` services. The main command used to introspect and control the system is `systemctl` It provides a system and a service manager that runs as PID and starts the rest of the system.

Company Mentioned

Mention Thumbnail
featured image - How to Run Scripts on Boot in Linux Using Systemd
Kayode Oluwasegun HackerNoon profile picture

Introduction

In this article, we will configure our Linux computer to autorun a script on boot. For the purpose of this article, we will be making use of systemd services.


BTW, I use Arch Linux, so if there’s any difference using a different distro, do not hesitate to leave a comment, please.

Linux-when.gif

What is systemd?

systemd is a suite of basic building blocks for a Linux system. It provides a system and a service manager that runs as PID and starts the rest of the system. systemd provides aggressive parallelization capabilities, uses sockets and D-Bus activation for starting services, keeps track of processes, etc.


You can read more on systemd here.


The main command used to introspect and control systemd is systemctl.

Steps

  • First, we will create a Bash script in /usr/local/sbin, for instance [notifyRemote.sh]

    (http://notifyRemote.sh), that would notify a remote machine once it’s booted.


  • We will make the file executable by running the command:


    sudo chmod +x /usr/local/sbin/notifyRemote.sh
    


  • Create a Unit file called startup.service in /etc/systemd/system/ to define a systemd service. You will need root access (sudo) to make changes or create these files.


  • We will make the file executable by running the command:


    sudo chmod +x /etc/systemd/system/startup.service
    


  • In /etc/systemd/system/startup.service, we would paste the below into the file as such:


    [Unit]
    Description=My Startup
    
    [Service]
    ExecStart=/usr/local/sbin/notifyRemote.sh
    
    [Install]
    WantedBy=multi.user.target
    


  • The ExecStart is the most important key here because it points to the Bash program that will run when the service is started.


  • We can test the service by running sudo systemctl start startup.service to confirm that the script will run.


  • Now to enable services to run on boot, we will run the command:


    sudo systemctl enable startup.service
    

Conclusion

Now, we should successfully create a script that runs automatically anytime we start our Linux machine.


You can consult the systemd man page for more information.


I hope you find this helpful. Please leave a like, comment, and share if you found this helpful, and also you can consider buying me a coffee too.


Also published here: https://blog.zt4ff.dev/running-scripts-on-boot-in-linux-using-systemd