Debian – Launching Python at Startup Without rc.local

debianlinuxpythonrc.local

I am slightly lost, I have a Debian 9 server and a Python Flask script that I am trying to launch at startup.

In the past I have used rc.local to launch things at startup but from reading it seems that it is now deprecated.

Can anyone tell me what is its replacement, what method am I best using now?

Best Answer

Debian 9 (like many other current Linux distributions) uses systemd to start and manage your system and services.

You'll be facing a bit of a learning curve compared to adding lines to rc.local but writing unit files (systemd jargon for what is effectively the equivalent of a start and stop script for a service) will be usefull skill to learn.

The Debian specific documentation on systemd is found on https://wiki.debian.org/systemd
The page https://wiki.debian.org/systemd/Services contains detailed step-by-step intructions for what is needed to write your own (minimal) unit file:

  • Create the unit file "myservice.service" in the directory /etc/systemd/system/

    # /etc/systemd/system/myservice.service 
    [Unit]
    Description=My Service
    After=network.target
    
    [Service]
    Type=simple
    Restart=always
    ExecStart=/usr/local/bin/myservice
    
    [Install]
    WantedBy=multi-user.target
    
  • Reload systemd to pick up your changed/new unit files with: systemctl daemon-reload

  • Enable and start the new service

    systemctl enable myservice.service
    systemctl start myservice.service