This How-To guide will walk through the process of creating a script that is run automatically at boot. This could be directly relevant to an end-user application that requires setting up servers, setting up environment variables, or enabling services. For this guide we will create and enable a WatchDog service that automatically reboots the system upon encountering an unexpected hardware or software hangup. This could be very useful for mission critical applications that do not have user intervention as an option. 

Step-by-step guide

  • First, we will need to create a script for enabling the WatchDog. The WatchDog is enabled automatically when the timeout setting is set which is nice because it keeps this script nice and short. This can be done using the Vi Text Editor:

    Target (Linux)

    vi /home/root/enableWD
    CODE
  • Once the editor is open, fill in the contents of the file so that it is the same as below:

    Vi Text Editor: enableWD

    #!/bin/bash
    
    wdctl -s 2
    CODE

    The vi text editor begins in "Command Mode" and you must first hit the 'i' key in order to enter "Insert Mode". Using the arrow keys to navigate, make the necessary changes and then hit ESC to go back to "Command mode". Now enter ":wq" to write the file and quit.


    Pro Tip: Use the right click on your mouse to paste. This will only work if you are in "Insert Mode" first.

  • Once the script is saved and closed, ensure that the file is executable by all users by using the following commands to modify the file's permissions:

    Target (Linux)

    chmod a+x /home/root/enableWD
    CODE
  • Now we need a systemd service that runs the script during boot. Systemd services are managed through Unit files which we will create by using the Vi Text Editor again:

    Target (Linux)

    vi /etc/systemd/system/enableWD.service
    CODE
  • Once the editor is open, fill in the contents of the Unit file so that it is the same as below:

    Vi Text Editor: enableWD.service

    [Unit]
    Description=Watchdog Enable Service
    After=basic.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/home/root/enableWD start
    
    [Install]
    WantedBy=default.target
    CODE
  • Once the Unit file is saved and closed we can enable the service to run during boot with the following:

    Target (Linux)

    systemctl enable enableWD
    CODE
  • In order for our change to take effect lets reboot the system: 

    Target (Linux)

    reboot
    CODE
  • Once booted back into Linux and logged in as root, try triggering a kernel panic with the following command. The WatchDog should initiate a reboot about 2 seconds after the panic starts. 

    Target (Linux)

    echo c > /proc/sysrq-trigger
    CODE

If you desire to disable the service we just created, use this command!

Target (Linux)

systemctl disable enableWD
CODE