Creating a daemon with almost zero effort.
The example with the start-stop-daemon uses Gentoo OpenRC as root.
The simplest daemon we can create is a while loop:
echo '#!/bin/sh' > whiledaemon.sh echo 'while true; do true; done' >> whiledaemon.sh chmod +x whiledaemon.sh
Now we start it as daemon
start-stop-daemon --pidfile whiledaemon.pid \ --make-pidfile --background ./whiledaemon.sh
Top shows that it is running:
top | grep whiledaemon.sh
We stop it using the pidfile:
start-stop-daemon --pidfile whiledaemon.pid \ --stop ./whiledaemon.sh
That’s it.
Hint: To add cgroups support on a Gentoo install, open /etc/rc.conf and uncomment
rc_controller_cgroups="YES"Then in the initscript you can set the other variables described below that line. Thanks for this hint goes to Luca Barbato!
If you want to ensure that the daemon keeps running without checking a PID file (which might in some corner cases fail because a new process claims the same PID), we can use runsvdir from runit.
Minimal examples for runit daemons - first as unpriviledged user, then as root.
Create a script which dies
echo '#!/usr/bin/env python\nfor i in range(100): a = i*i' >/tmp/foo.py chmod +x /tmp/foo.py
Create the daemon folder
mkdir -p ~/.local/run/runit_services/python ln -sf /tmp/foo.py ~/.local/run/runit_services/python/run
Run the daemon via runsvdir
runsvdir ~/.local/run/runit_services
Manage it with sv (part of runit)
# stop the running daemon SVDIR=~/.local/run/runit_services/ sv stop python # start the service (it shows as `run` in top) SVDIR=~/.local/run/runit_services/ sv start python
Minimal working example for setting up runit as root - like a sysadmin might do it.
echo '#!/usr/bin/env python\nfor i in range(100): a = i*i' >/tmp/foo.py && chmod +x /tmp/foo.py && mkdir -p /run/arne_service/python && printf '#!/bin/sh\nexec /tmp/foo.py' >/run/arne_service/python/run && chmod +x /run/arne_service/python/run && chown -R arne /run/arne_service && su - arne -c 'runsvdir /run/arne_service'
Or without bash indirection (giving up some flexibility we don’t need here)
echo '#!/usr/bin/env python\nfor i in range(100): a = i*i' >/tmp/foo.py && chmod +x /tmp/foo.py && mkdir -p /run/arne_service/python && ln -s /tmp/foo.py /run/arne_service/python/run && chown -R arne /run/arne_service && su - arne -c 'runsvdir /run/arne_service'
Anhang | Größe |
---|---|
2015-04-15-Mi-simple-daemon-openrc.org | 2.92 KB |
2015-04-15-Mi-simple-daemon-openrc.pdf | 152.99 KB |
Use Node:
⚙ Babcom is trying to load the comments ⚙
This textbox will disappear when the comments have been loaded.
If the box below shows an error-page, you need to install Freenet with the Sone-Plugin or set the node-path to your freenet node and click the Reload Comments button (or return).
If you see something like Invalid key: java.net.MalformedURLException: There is no @ in that URI! (Sone/search.html)
, you need to setup Sone and the Web of Trust
If you had Javascript enabled, you would see comments for this page instead of the Sone page of the sites author.
Note: To make a comment which isn’t a reply visible to others here, include a link to this site somewhere in the text of your comment. It will then show up here. To ensure that I get notified of your comment, also include my Sone-ID.
Link to this site and my Sone ID: sone://6~ZDYdvAgMoUfG6M5Kwi7SQqyS-gTcyFeaNN1Pf3FvY
This spam-resistant comment-field is made with babcom.