diff --git a/docs/_config.yml b/docs/_config.yml index c22399f..0e2e73d 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -35,6 +35,8 @@ navigation: url: /patterns/sentry/ - text: Supervisor url: /patterns/supervisor/ + - text: Systemd + url: /patterns/systemd/ - text: Contributing url: /contrib/ subs: diff --git a/docs/docs/workers.md b/docs/docs/workers.md index 732f75e..2175fd0 100644 --- a/docs/docs/workers.md +++ b/docs/docs/workers.md @@ -30,7 +30,7 @@ concurrent processing going on. If you want to perform jobs concurrently, simply start more workers. You should use process managers like [Supervisor](/patterns/supervisor/) or -(systemd)[https://www.freedesktop.org/wiki/Software/systemd/] to run RQ workers in production. +[systemd](/patterns/systemd/) to run RQ workers in production. ### Burst Mode diff --git a/docs/patterns/systemd.md b/docs/patterns/systemd.md new file mode 100644 index 0000000..8231e7a --- /dev/null +++ b/docs/patterns/systemd.md @@ -0,0 +1,39 @@ +--- +title: "Running RQ Workers under systemd" +layout: patterns +--- + +## Running RQ Workers Under systemd + +[systemd][1] is process manager that's built into many popular Linux distributions. + +To run multiple workers under systemd, you'll first need to create a unit file. +We can name this file `rqworker@.service`, put this file in `/etc/systemd/system` +on Ubuntu. Where you put this file may differ by what OS you run. + +{% highlight ini %} +[Unit] +Description=RQ Worker Number %i +After=network.target + +[Service] +Type=simple +WorkingDirectory=/path/to/working_directory +Environment=LANG=en_US.UTF-8 +Environment=LC_ALL=en_US.UTF-8 +Environment=LC_LANG=en_US.UTF-8 +ExecStart=/path/to/rq worker -c config.py +ExecReload=/bin/kill -s HUP $MAINPID +ExecStop=/bin/kill -s TERM $MAINPID +PrivateTmp=true +Restart=always + +[Install] +WantedBy=multi-user.target +{% endhighlight %} + +If your unit file is properly installed, you should be able to start workers by +invoking `systemctl start rqworker@1.service`, `systemctl start rqworker@2.service`. +You can also reload all the workers by invoking `systemctl reload rqworker@*`. + +You can read more about systemd and unit files [here](https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files).