The Lino Daemon¶
This document explains why and how to use linod
.
A Lino application can declare background tasks. Such tasks run in the
background, i.e. as a service in another process than the web server. That other
process runs a Lino specific admin command called linod
.
- linod¶
Starts a long-running process that runs scheduled background tasks.
On a development machine you simply run this in a separate terminal. On a production server we recommend to run this as a daemon via Supervisor as described below.
This feature requires Dan Bader’s schedule package, which will get installed
automatically if you run install
.
As an application developer you define background tasks using
dd.schedule_often
and
dd.schedule_daily
. For example the
send_pending_emails_often
and clear_seen_messages
of the
lino.modlib.notify
plugin.
To enable this feature, you must set use_linod
to True. This is usually done by the
application developer, but this decision can be overridden by a system admin in
a local settings.py
file. The linod
command will simply do
nothing when this setting is False.
Additionally to having use_linod
set to
True, you must also start the linod
service in order to actually
execute the scheduled tasks. The getlino configure --linod
option
specifies that every new Lino site will automatically have a linod.sh
file in its project directory and a supervisor job that runs the
linod.sh
script as a service.
Activating the feature¶
>>> from atelier.sheller import Sheller
>>> shell = Sheller("lino_book/projects/roger")
>>> shell("python manage.py linod --list")
This site does not use linod.
As a site maintainer you can check whether your application has scheduled background jobs by issuing the following command in your project directory:
$ python manage.py linod --list
For example in the noi1e
demo project
there are 6 jobs:
>>> shell = Sheller("lino_book/projects/noi1e")
>>> shell("python manage.py linod --list")
...
6 scheduled jobs:
[1] Every 1 day at 20:00:00 do checksummaries() (last run: [never], next run: ...)
[2] Every 1 day at 20:00:00 do checkdata() (last run: [never], next run: ...)
[3] Every 10 seconds do send_pending_emails_often() (last run: [never], next run: ...)
[4] Every 1 day at 20:00:00 do send_pending_emails_daily() (last run: [never], next run: ...)
[5] Every 1 day at 20:00:00 do clear_seen_messages() (last run: [never], next run: ...)
[6] Every 3600 seconds do update_all_repos() (last run: [never], next run: ...)
Installation instructions¶
This section has become useless because these things are now done automatically by getlino.
Install the Supervisor package:
$ sudo apt install supervisor
The supervisor package is being installed system-wide, it is not related to any specific project.
Create a shell script
linod.sh
in your project directory:#!/bin/bash set -e # exit on error cd /path/to/myprj . env/bin/activate exec python manage.py linod
Note: the exec command is needed here in order to avoid #1086. Thanks to Paul Lockaby
Create a file
linod_myprj.conf
in/etc/supervisor/conf.d/
with this content:[program:linod_myprj] command = /path/to/myprj/linod.sh username = www-data umask = 002
Restart supervisord:
$ sudo service supervisor restart
Have a look at the log files in
/var/log/supervisor
.