75 lines
3.1 KiB
Markdown
75 lines
3.1 KiB
Markdown
---
|
|
title: Daemonize a Yesod application
|
|
author: nek0
|
|
tags: english, meta, programming
|
|
description: Found a way to daemonize my commenting service
|
|
---
|
|
|
|
**If you want to create a systemd service file, look [here][systemd]**
|
|
|
|
As you might know I have written my own commenting service, which up until recently I had to start manually in a [screen](https://www.gnu.org/software/screen/) session. Then I decided to write my own init-script.
|
|
|
|
I have to admit, that I am no experienced sysadmin or something like that, but just a random guy with a strange love (or addiction) to computers. So this is my first time doing this.
|
|
|
|
For managing the starting and stopping of the service I chose to use the start-stop-daemon shipped with the system on my server. Additionally I used the skeleton file for init-scripts, which you can find in `/etc/init.d/skeleton`.
|
|
|
|
After consulting the manpage of start-stop-daemon I came up with the following command for starting the commenting service:
|
|
|
|
```bash
|
|
start-stop-daemon --start -b -u nek0 --chuid nek0 --name yacs --exec ./yacs -d /home/nek0/www/yacs-run/ \
|
|
-- config/settings.yml > /var/log/yacs.log
|
|
|
|
```
|
|
|
|
What this actually means: The first option ist pretty self explanatory. `-b` starts the service in the background. `-u` and `--chuid` ensure, that the service runs as a user, not as root. I chose my own user here, but you can also use `nobody` if you like. The name of the service is specified by `--name`. `-d` specifies the working directory of the service you want to start and finally `--exec` is the path to the executable, in this case relative to the working directory. Everything after the final double-dashes are arguments passed to the executable itself.
|
|
|
|
for stopping the whole thing I use the following command:
|
|
|
|
```bash
|
|
start-stop-daemon --stop -u nek0 --name yacs
|
|
```
|
|
|
|
This is even simpler than the above and is really self explanatory after all the information you got above.
|
|
|
|
the whole init-script looks like this:
|
|
|
|
```bash
|
|
#! /bin/sh
|
|
### BEGIN INIT INFO
|
|
# Provides: yacs
|
|
# Required-Start: $nginx
|
|
# Required-Stop:
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop:
|
|
# Short-Description: Start YACS commenting service
|
|
# Description: start YACS commenting service
|
|
### END INIT INFO
|
|
|
|
case "$1" in
|
|
start)
|
|
logger starting YACS
|
|
start-stop-daemon --start -b -u nek0 --chuid nek0 --name yacs --exec ./yacs -d /home/nek0/www/yacs-run/ \
|
|
-- config/settings.yml > /var/log/yacs.log
|
|
;;
|
|
stop)
|
|
logger stopping YACS
|
|
start-stop-daemon --stop -u nek0 --name yacs
|
|
;;
|
|
restart)
|
|
logger restarting YACS
|
|
start-stop-daemon --stop -u nek0 --name yacs
|
|
start-stop-daemon --start -b -u nek0 --chuid nek0 --name yacs --exec ./yacs -d /home/nek0/www/yacs-run/ \
|
|
-- conifg/settings.yml > /var/log/yacs.log
|
|
;;
|
|
status)
|
|
# No-op
|
|
;;
|
|
*)
|
|
echo "Usage: yacs {start|stop|restart}" >&2
|
|
exit 3
|
|
;;
|
|
esac
|
|
```
|
|
I hope this is helpful for others. If something is unclear, you can always leave a comment now ^^
|
|
|
|
[systemd]:https://nek0.eu/posts/2015-08-28-Daemonize-a-Yesod-application-systemd-style.html
|