Run any Executable as a Service in Linux

Running any executable as a linux service

Page content

Here’s a set of instructions on How to Configure to Run any Executable as a Service in Linux with Systemd.

linux cogs Above is an AI-generated image (by Flux 1 dev model) of the cogs representing linux DIY approach.

Systemd

Systemd is a system and services manager and initialization tool in some linux distros.

Some of the popular distros with systemd:

  • Ubuntu 16.04 or newer
  • Debian Jesse or newer
  • Arch Linux
  • CentOS 7 / RHEL 7 or newer
  • Fedora 15 or newer

systemctl

systemctl is a commandline tool to control the systemd.

list all services

To list of all services run

systemctl list-units --type=service

Create a service file

Navigate to the systemd service directory and create a new file with a .service extension13:

sudo nano /etc/systemd/system/your_service_name.service

Configure the service file:

Add the following content to the file, adjusting the values as needed135:

[Unit]
Description=Your Service Description
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/path/to/your/executable/directory
ExecStart=/path/to/your/executable
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Save and close the file.

Delayed service start

If you suspect a timing issue during service start, consider adding a delay to your service config:

[Service]
ExecStartPre=/bin/sleep 10

Service dependencies

To configure your service dependencies: in the the [Unit] section of the service config gile file,

add the following directives:

Use After= to specify services that should start before your service:

After=network.target other_service.service

Use Requires= to define hard dependencies:

Requires=required_service.service

Use Wants= for soft dependencies:

Wants=optional_service.service

Reload systemd to recognize the new service

sudo systemctl daemon-reload

Check service dependencies

sudo systemctl list-dependencies your_service_name.service

Enable the service to start on boot

sudo systemctl enable your_service_name.service

To verify that your service is set to start on boot:

sudo systemctl is-enabled your_service_name.service

Start the service

sudo systemctl start your_service_name.service
# or
sudo systemctl restart your_service_name.service

Check the service status

If something went wrong - check linux service logs and status:

sudo systemctl status your_service_name.service

or

sudo journalctl -u your_service_name.service

For Python Scripts

ExecStart=/path/to/conda/envs/my_env_name/bin/python /path/to/executable.py

Comments

You can now manage your service using systemctl commands, such as start, stop, restart, and status.

For executables that require parameters, modify the ExecStart line in the service file accordingly.

For example If you need to run a Java application, use the full Java command in the ExecStart line.

Remember to adjust file permissions and ownership as necessary, and ensure that the executable has the correct execute permissions.