Search code examples
pythonlinuxcassandrabottlesupervisord

How to add a delay to supervised process in supervisor - linux


I added a bottle server that uses python's cassandra library, but it exits with this error:
Bottle FATAL Exited too quickly (process log may have details)
log shows this:
File "/usr/local/lib/python2.7/dist-packages/cassandra/cluster.py", line 1765, in _reconnect_internal raise NoHostAvailable("Unable to connect to any servers", errors)

So I tried to run it manually using supervisorctl start Bottle ,and then it started with no issue. The conclusion= Bottle service starts too fast (before the needed cassandra supervised service does): a delay is needed!


Solution

  • Not happy enough with the sleep hack I created a startup script and launched supervisorctl start processname from there.

    [program:startup]
    command=/startup.sh
    startsecs = 0
    autostart = true
    autorestart = false
    startretries = 1
    priority=1
    
    [program:myapp]
    command=/home/website/venv/bin/gunicorn /home/website/myapp/app.py
    autostart=false
    autorestart=true
    process_name=myapp
    

    startup.sh

    #!/bin/bash
    sleep 5
    supervisorctrl start myapp
    

    This way supervisor will fire the startup script once and this will start myapp after 5 seconds, mind the autostart=false and autorestart=true on myapp.