Linux script after boot

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,

Читайте также:  Setup exe не является приложением win32 что делать при установке windows 10

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 )

Читайте также:  Canon lbp 3110 драйвер windows 10 64 bit

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 run script after N minutes of boot with systemd CentOS/RHEL 7/8

Table of Contents

In this article I will share systemd unit file and examples to run script after N minutes of boot using systemd (not with cron job). Ideally such task can also be done using cron jobs but since we already have systemd then why should we depend on cron job.

Using OnBootSec= or OnStartupSec= we can easily run script after N minutes of boot based on the value on N . let us verify this using some examples:

Some more articles on similar topic:

Overview on systemd.timer

  • A unit configuration file whose name ends in » .timer » encodes information about a timer controlled and supervised by systemd, for timer-based activation .
  • The common configuration items are configured in the generic » [Unit] » and » [Install] » sections. The timer specific configuration options are configured in the » [Timer] » section.
  • For each timer file, a matching unit file must exist, describing the unit to activate when the timer elapses.
  • By default, a service by the same name as the timer (except for the suffix) is activated. Example: a timer file foo.timer activates a matching service foo.service. The unit to activate may be controlled by Unit=
  • Note that in case the unit to activate is already active at the time the timer elapses it is not restarted, but simply left running. There is no concept of spawning new service instances in this case.
  • Due to this, services with RemainAfterExit= set (which stay around continuously even after the service’s main process exited) are usually not suitable for activation via repetitive timers, as they will only be activated once, and then stay around forever.
  • Timer units automatically gain a Before= dependency on the service they are supposed to activate.
  • Timer units will automatically have dependencies of type Requires= and After= on sysinit.target , a dependency of type Before= on timers.target, as well as Conflicts= and Before= on shutdown.target to ensure that they are stopped cleanly prior to system shutdown.

To list all the available timers in your environment use

Читайте также:  Не запускается windows 10 код ошибки 0xc000007b

Step 1: Create sample script

To run script after N minutes of boot with systemd we will create a dummy script which will put some content in an empty file after 5 minutes of boot.

Provide executable permission to the script

Step 2: Sample systemd unit service file to run script after N minutes of boot

Here we must create a systemd unit service file and a matching systemd unit timer file to run script after N minutes of boot. We can either use OnBootSec= or OnStartupSec= to run script with delay after boot in Linux

Step 2.1: OnBootSec vs OnStartupSec

  • OnBootSec= Defines a timer relative to when the machine was booted up. In containers, for the system manager instance, this is mapped to OnStartupSec= , making both equivalent.
  • OnStartupSec= Defines a timer relative to when the service manager was first started. For system timer units this is very similar to OnBootSec= as the system service manager is generally started very early at boot. It’s primarily useful when configured in units running in the per-user service manager, as the user service manager is generally started on first login only, not already during boot.

Step 3: Sample systemd unit timer file to run script after N minutes of boot

timer is a unit configuration file whose name ends in » .timer » encodes information about a timer controlled and supervised by systemd, for timer-based activation.

Here for OnBootSec or OnStartupSec,

  • The arguments to the directives are time spans configured in seconds. Example: OnBootSec=50 means 50s after boot-up.
  • The argument may also include time units. Example: OnBootSec=5h 30min means 5 hours and 30 minutes after boot-up.
  • For details about the syntax of time spans supported with OnBootSec= or OnStartupSec= follow man page of systemd.timer

Refresh the systemd configuration files

Disable the systemd unit service file as this should not start automatically which is the idea behind this article. We want this service to run script after N minutes of boot based on the timer value.

Next enable the systemd unit timer file so that this will run post boot and will then trigger the mapped systemd unit service file based on the timer value.

Next reboot the node.

Step 4: Verify the systemd unit file configuration

Post reboot when we check the status of run-script-with-delay.timer , here observe the highlighted section where it shows the next trigger which is planned after 5 minutes which we have configured with OnBootSec in the timer unit file.

Once the trigger time is hit, the service will perform it’s defined task which here is to run script after 5 minutes of boot. As you see now the trigger is showing «not applicable» for timer unit

Also verify the content of our output file.

So as expected our script /tmp/delay_script.sh was called after 5 minutes of system boot without using any cron job.

Lastly I hope the steps from the article to run script after N minutes of boot without cronjob on CentOS/RHEL 7/8 Linux was helpful. So, let me know your suggestions and feedback using the comment section.

Related Searches: How to execute script with certain pre-defined delay after boot up in Linux. How to execute a script at startup with 5 minutes delay using systemd (not cronjob) in CentOS/RHEL 7/8 Linux. How to fix systemctl failing with unknown section ‘Timer’

Didn’t find what you were looking for? Perform a quick search across GoLinuxCloud

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

For any other feedbacks or questions you can either use the comments section or contact me form.

Thank You for your support!!

Источник

Оцените статью