Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Mar 2026 21:30:29 +0000
From:      Todd Greenwood <toddg@zwrob.com>
To:        "freebsd-erlang@freebsd.org" <freebsd-erlang@freebsd.org>
Subject:   How do you create service scripts for erlang applications?
Message-ID:  <2Yrj8cxCD2A9FzD1K0TmTQDbQYwN5_iJ1NvnVQzsL2XVOyqFhCAkOPcdFQKKzTEDZXlf-r3W5WWZI2f-kF1s2bWEyhsupdo9IoMhrzp2bBo=@zwrob.com>

index | next in thread | raw e-mail

Hi Freebsd-Erlangers. This is my first post here...

Question: In FreeBSD, how do you write service scripts for BEAM applications? Is there a template I can follow?

I have simple needs. My app currently logs to stdout. I want to run the app as a daemon and send the logs to a file. Later, I'll get sophisticated and use more of Erlangs tooling for logs and log rotation, etc. And after that I'll figure out how to use syslog and send all my logs to a log server.

Here's what I've started with:

```
#!/bin/sh
#
# PROVIDE: gws
# REQUIRE: DAEMON

PACKAGE=myapp
BASE=/opt/myapp

. /etc/rc.subr

name="myapp"
desc="dummy app"
rcvar="${name}_enable"
command="/usr/local/lib/erlang28/bin/erl"
command_args="-pa \"$BASE\"/*/ebin -eval \"$PACKAGE@@main:run($PACKAGE)\" -noshell"
load_rc_config "${name}"

set_rcvar
pidfile="/var/run/${name}.pid"
procname="${name}"

run_rc_command "$1"
```

This is not great b/c:
* the service does not run as a daemon
* logs go to stdout and not to a file

I looked at this blog entry:
https://www.mo4tech.com/a-standalone-way-to-launch-an-erlang-application-daemon.html

and it suggested using the 'detached' flag, like this:

```
command_args="-pa \"$BASE\"/*/ebin -eval \"$PACKAGE@@main:run($PACKAGE)\" -detached"
```

That's better, b/c now the erlang aplication is backgrounded.... However, the output is not going to a log, and the 'service stop' and 'service restart' commands don't do anything.

Any suggestions welcome.

-ToddG


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2Yrj8cxCD2A9FzD1K0TmTQDbQYwN5_iJ1NvnVQzsL2XVOyqFhCAkOPcdFQKKzTEDZXlf-r3W5WWZI2f-kF1s2bWEyhsupdo9IoMhrzp2bBo=>