Here's an example systemd script for Spiffy the webserver, for use on systems using the systemd daemon manager.

Systemd requires two files to be placed in two different locations:

Be sure to make both files executable and owned by root.

The spiffy file, to be placed in /usr/lib/systemd/scripts/

#! /bin/sh
# -*- shell-script -*-

# This is /etc/init.d/spiffy on Linux systems using systemd
# It assumes you have a "spiffy.scm" script in /usr/local/libexec and a log directory in /var/log/spiffy

# Select which "csi" program to use; defaults to the one in $PATH
CSI=csi
# Use a longer trace buffer and a larger nursery size (optional)
CSI_ARGS="-:s1m -:a200"

DATE_FORMAT="+%Y-%m-%d %H:%M:%S"

CONFIG_FILE="/usr/local/libexec/spiffy.scm"
LOG_DIR="/var/log/spiffy"

start() {
 if [ ! -d "$LOG_DIR" ]; then
      echo "Log directory \"$LOG_DIR\" does not exist."
      exit 1
    fi

    if [ ! -r "$CONFIG_FILE" ]; then
      echo "Cannot find or read the configuration file. Please create or check the permissions of the following file: \"$CONFIG_FILE\"."
      exit 1
    fi

    echo "Starting spiffy..."
    echo "start: " `date "$DATE_FORMAT"` >> /var/log/spiffy/start-stop.log
    (cd /var/log/spiffy; ulimit -c unlimited ; $CSI $CSI_ARGS -s /usr/local/libexec/spiffy.scm &)  </dev/null &> /var/log/spiffy/init.log
}

stop() {
    echo "Stopping spiffy..."
    echo "stop: " `date "$DATE_FORMAT"` >> /var/log/spiffy/start-stop.log
    pids=`ps ax | grep "[/]usr/local/libexec/spiffy.scm" | awk '{print $1}'`
    if [ -z "$pids" ] ; then
       echo "spiffy is not running"
    else
        for pid in $pids; do
            echo "killing " $pid
            kill $pid
        done
    fi
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 1
        start
        ;;
    *) exit 1
esac

The spiffy.service file, to be placed in /usr/lib/systemd/system/

[Unit]
Description=Spiffy the webserver

[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/scripts/spiffy start
ExecStop=/usr/lib/systemd/scripts/spiffy stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Now you can start, stop or restart Spiffy using the following commands:

$ systemctl start spiffy
$ systemctl stop spiffy
$ systemctl restart spiffy

To enable Spiffy to be started at boot:

$ systemctl enable spiffy