So, I've recently deployed my first Flask app with gunicorn. During deployment, I encountered the most peculiar issue. I had created a systemd unit file (the following is the working, functional example):
[Unit] Description=Gunicorn instance for newscrape After=network.target After=mysql.service Requires=mysql.service [Service] User=www-data Group=www-data WorkingDirectory=/var/www/newscrape Environment="PATH=/var/www/newscrape/newscrapeenv/bin" ExecStart=/var/www/newscrape/newscrapeenv/bin/gunicorn --bind 127.0.0.1:9001 run:app [Install] WantedBy=multi-user.target
Now, this works fine, but it is not what I originally wanted.
My ExecStart line originally read:
ExecStart=/var/www/newscrape/newscrapeenv/bin/gunicorn --workers 4 --bind 127.0.0.1:9001 run:app
When I tried enabling and starting the unit file, I began to experience a crash loop for both my created service and the MySQL service. An endless waltz of both services horrendously going down in flames ensued.
Running the command:
ss -tln showed neither service listening or one of two running at any given time.
My question is this: Why does gunicorn with workers crash the MySQL server but gunicorn without workers does not?