Running a Flask app on startup with systemd

15,591

Solution 1

Fixed my own problem. I had to change the file owner to match the systemd script and then make it executable:

chown ubuntu /home/ubuntu/my-server/script.py
chmod +x /home/ubuntu/my-server/script.py

Solution 2

Not sure if this helps but this is the service file that I use to control a flask application for a personal project. I think by default, systemd will run a script with a /bin/sh shell with no personalizations. You might want to try switching to a /bin/sh shell and running your command. There may be an environment variable missing.

Unit file from link:

[Unit]
Description=Persistent Transactions API
After=syslog.target network.target electrum.service

[Service]
User=percy
Group=percy
ExecStart=/bin/bash -c "source /opt/persist_transaction/bin/activate ; /opt/persist_transaction/api.py -c /opt/persist_transaction/config.ini"
Restart=always

[Install]
WantedBy=multi-user.target
Share:
15,591

Related videos on Youtube

k26dr
Author by

k26dr

Updated on September 18, 2022

Comments

  • k26dr
    k26dr over 1 year

    I have the following systemd service to run my flask app:

    [Unit]
    Description=My Flask server
    After=network.target
    
    [Service]
    User=ubuntu
    ExecStart=/home/ubuntu/my-server/script.py
    WorkingDirectory=/home/ubuntu/my-server/
    Restart=on-failure
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target
    

    However, when I run

    systemctl start my-server.service
    

    I get the following status

    my-server.service - My Flask server
       Loaded: loaded (/etc/systemd/system/my-server.service; enabled; vendor preset: enabled)
       Active: active (exited) (Result: exit-code) since Wed 2017-06-21 22:24:18 UTC; 8min ago
     Main PID: 8407 
    
    (code=exited, status=203/EXEC)
    

    How do I prevent the Flask server from exiting? When I run the script directly with

    /home/ubuntu/my-server/script.py
    

    it works fine. But if I run it with systemd, the server exits immediately.