--- 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