• Posts
  • RSS
  • ◂◂RSS
  • Contact

  • I Like Upstart

    February 11th, 2015
    tech  [html]
    Recently it's been fashionable to complain about all the ways modern Unix has lost its way, departing from the true path of System V. Reading along without any experience in the tools I wasn't too sure; people often build things that are too complex, but people also don't usually rebuild core parts of operating systems unless there are significant problems with the old system. I just set up an Upstart job, though, and I really like it.

    There's a bit of a gap between how a program is released by its developers and how its used by things that depend on it. Take uwsgi. [1] I build it and start it up following the instructions:

    ./configure
    make
    sudo make install
    uwsgi \
      --socket :7090 \
      --wsgi-file example.py
    
    Now uwsgi will listen on port 7090 and respond to requests by running a python program, example.py and returning the output.

    My webserver is configured with:

    location /wsgi {
      include uwsgi_params;
      uwsgi_pass 127.0.0.1:7090;
      pagespeed off;
    }
    
    So now when a request comes into the webserver for /wsgi/foo it gets forwarded to uwsgi and from there to example.py which knows how to handle it.

    This is all great, but then I log off. This kills uwsgi, and all my requests to /wsgi/foo start getting "backend not responding" errors. So how do I keep uwsgi running when I log off? I could use nohup, right?

    nohup uwsgi \
      --socket :7090 \
      --wsgi-file example.py &
    
    Now when I log off it keeps running; great! But what if I reboot the machine?

    The traditional answer is to write a script, /etc/init.d/uwsgi that's responsible for starting and stopping uwsgi, and restarting it if there's a problem. These scripts are mostly boilerplate, however, with /etc/init.d/foo almost identical to /etc/init.d/bar. So in Upstart you instead write a short config file, /etc/init/uwsgi.conf:

    description "uwsgi server"
    start on runlevel [2345]
    stop on runlevel [06]
    respawn
    exec uwsgi \
      --socket :7090 \
      --wsgi-file /path/to/example.py
    
    And run it with:
    sudo service start uwsgi
    
    which will automatically happen on restart. [2]

    This is so much better! Simple, short, you just write what you need.

    (While the version of Ubuntu I'm running uses Upstart, the next version is planned to use systemd instead. While I haven't tried systemd, from looking at the docs it sounds like it also uses short declarative service configuration files.)


    [1] I don't mean to pick on uwsgi, and in fact they have pretty good documentation on how to manage it. Nginx would have been a better example here; when people want to install ngx_pagespeed it's often their first experience installing nginx from source, and the nginx docs here are kind of awkward. It's either "your distro will manage it" or "you should mostly know how to do this".

    [2] In the case of uwsgi it can handle some of these steps itself, so while the example I gave works you can do better; see the docs for uWSGI with Upstart.

    Comment via: google plus

    Recent posts on blogs I like:

    Collections: The Queen’s Latin or Who Were the Romans, Part V: Saving And Losing an Empire

    This is the fifth and final part (I, II, III, IV) of our series asking the question ‘Who were the Romans?’ How did they understand themselves as a people and the idea of ‘Roman’ as an identity? Was this a homogeneous, ethnically defined group, as some ver…

    via A Collection of Unmitigated Pedantry July 30, 2021

    Modernizing Rail 2021 Announcement

    We are happy to announce that on Sunday the 29th of August we will hold this year’s Modernizing Rail conference, on the heels of the success last year. Please register using this form. And please give details on what you’d like to see, and if you’re willi…

    via Pedestrian Observations July 29, 2021

    Songs about terrible relationships

    [Spoilers for several old musicals.] TV Tropes lists dozens of examples of the “I want” song (where the hero of a musical sings about their dream of escaping their small surroundings). After watching a bunch of musicals on maternity leave, I’m wondering h…

    via The whole sky July 17, 2021

    more     (via openring)


  • Posts
  • RSS
  • ◂◂RSS
  • Contact