ArrowLeft Icon

Running a Service in the Background with SystemV in Linux: A Comprehensive Guide

📆 · ⏳ 3 min read · 👀
·

Introduction

SystemV, also known as System Five, is an init system used in Unix-like operating systems, including many Linux distributions. It is responsible for initializing the system, starting and stopping services, and managing runlevels.

In this blog, we’ll discuss how to run a service in the background using SystemV init scripts.

Writing a SystemV Init Script

An init script is a shell script that is executed at system startup to initialize the system and start or stop services. In SystemV, init scripts are stored in the /etc/init.d directory.

To write a SystemV init script, you need to follow a specific format, including a few required and optional sections.

The required sections are the following:

#!/bin/sh

### BEGIN INIT INFO
# Provides:          service_name
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop the service_name service
### END INIT INFO

In this section, you need to replace service_name with the name of your service and provide a short description of what the service does. The Required-Start and Required-Stop fields specify the dependencies of the service, and the Default-Start and Default-Stop fields specify the runlevels at which the service should be started and stopped.

The next section of the init script is the actual logic to start and stop the service:

start() {
  # Start the service
  /path/to/service start
}

stop() {
  # Stop the service
  /path/to/service stop
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: service_name {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

In this section, you need to replace /path/to/service with the actual path to your service, and replace service_name with the name of your service.

The start and stop functions contain the commands to start and stop the service, respectively. The case statement is used to handle the start, stop, and restart options, as specified on the command line.

Installing and Starting the Service

To install the service, make the init script executable and copy it to the /etc/init.d directory:

chmod +x /path/to/service_name
cp /path/to/service_name /etc/init.d/

To start the service, run the following command:

service service_name start

To stop the service, run the following command:

service service_name stop

To restart the service, run the following command:

service service_name restart

Example of Running PM2 with SystemV

This is how I am using SystemV for running PM2 ↗️, a popular process manager for Node.js applications, in the background.

#!/bin/bash

# chkconfig: 2345 99 01
# description: PM2 is a process manager for Node.js applications.

. /etc/init.d/functions

PM2_HOME="/root/.pm2"
PM2_BIN="$(which pm2)"

start() {
    echo "Starting PM2"
    if [ -f "$PM2_HOME/pm2.pid" ]; then
        echo "PM2 is already running"
        exit 1
    fi
    $PM2_BIN start
}

stop() {
    echo "Stopping PM2"
    $PM2_BIN stop
}

restart() {
    echo "Restarting PM2"
    $PM2_BIN restart
}

status() {
    $PM2_BIN list
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac

exit $?

This script sets up a PM2 service that can be controlled with the following commands:

sudo service pm2 start
sudo service pm2 stop
sudo service pm2 restart
sudo service pm2 status

Note that you need to place this script in the /etc/init.d/ directory and make it executable by running chmod +x /etc/init.d/pm2.

Conclusion

In conclusion, SystemV is an important init system used in many Linux distributions for managing system initialization, starting and stopping services, and managing runlevels. With the steps outlined in this blog, you now know how to write a SystemV init script, install and start the service, and control its behavior.

By following these steps, you can run a service in the background with SystemV in Linux, ensuring that it remains active even when you log out of the system.

EnvelopeOpen IconStay up to date

Get notified when I publish something new, and unsubscribe at any time.

You may also like

  • # linux

    How to Use the Linux Socat Command for Bidirectional Data Transfer Between Network Connections

    The Linux socat command provides a powerful and flexible solution for bidirectional data transfer between network connections. In this article, we'll explore how to use the socat command in Linux and provide practical examples to help you get started.

  • # linux

    How to Use the Linux Shred Command for Secure File Deletion

    Deleting a file from your computer's hard drive doesn't actually erase the data, leaving it open to recovery by unauthorized individuals. The Linux `shred` command provides a simple and effective solution to securely delete files from your computer's hard drive. In this article, we'll explore how to use the `shred` command in Linux and provide practical examples to help you get started.

  • # linux

    How to Use the Linux Netcat Command for Network Communication and Testing

    The Linux 'nc' command, also known as Netcat, is a versatile networking tool that can be used for a variety of tasks such as network communication, port scanning, file transfer, and network testing. It provides a simple and effective way to connect and interact with other networked devices. In this article, we'll explore how to use the 'nc' command in Linux and provide practical examples to help you get started.