The Lino Daemon¶
This document explains why and how to use
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
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.
As an application developer you define background tasks using
dd.schedule_daily. For example the
clear_seen_messages of the
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
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
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:  Every 1 day at 20:00:00 do checksummaries() (last run: [never], next run: ...)  Every 1 day at 20:00:00 do checkdata() (last run: [never], next run: ...)  Every 10 seconds do send_pending_emails_often() (last run: [never], next run: ...)  Every 1 day at 20:00:00 do send_pending_emails_daily() (last run: [never], next run: ...)  Every 1 day at 20:00:00 do clear_seen_messages() (last run: [never], next run: ...)  Every 3600 seconds do update_all_repos() (last run: [never], next run: ...)
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.shin your project directory:
#!/bin/bash set -e # exit on error cd /path/to/myprj . env/bin/activate exec python manage.py linod
Create a file
/etc/supervisor/conf.d/with this content:
[program:linod_myprj] command = /path/to/myprj/linod.sh username = www-data umask = 002
$ sudo service supervisor restart
Have a look at the log files in