#!/bin/sh ### BEGIN INIT INFO # Provides: ollama # Required-Start: $remote_fs $network # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Ollama local LLM server ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin DAEMON=/usr/local/bin/ollama NAME=ollama USER=ollama GROUP=ollama RUNDIR=/run/$NAME PIDFILE=$RUNDIR/$NAME.pid . /lib/lsb/init-functions [ -f /etc/default/ollama ] && . /etc/default/ollama : "${OLLAMA_HOST:=127.0.0.1:11434}" : "${OLLAMA_MODELS:=/var/lib/ollama/models}" : "${OLLAMA_LOG:=/var/log/ollama.log}" ensure_dirs() { install -d -o "$USER" -g "$GROUP" -m 0755 "$RUNDIR" install -d -o "$USER" -g "$GROUP" -m 0755 /var/lib/ollama install -d -o "$USER" -g "$GROUP" -m 0755 "$OLLAMA_MODELS" install -d -m 0755 /var/log touch "$OLLAMA_LOG" chown "$USER:$GROUP" "$OLLAMA_LOG" } start() { log_daemon_msg "Starting $NAME" ensure_dirs start-stop-daemon --start --background --make-pidfile \ --pidfile "$PIDFILE" \ --chuid "$USER:$GROUP" \ --startas /bin/sh -- -c \ "exec env OLLAMA_HOST=\"$OLLAMA_HOST\" OLLAMA_MODELS=\"$OLLAMA_MODELS\" \"$DAEMON\" serve >>\"$OLLAMA_LOG\" 2>&1" RET=$? if [ $RET -eq 0 ]; then sleep 2 if kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then log_end_msg 0 else log_end_msg 1 fi else log_end_msg $RET fi } stop() { log_daemon_msg "Stopping $NAME" start-stop-daemon --stop --pidfile "$PIDFILE" --retry 5 RET=$? rm -f "$PIDFILE" log_end_msg $RET } status() { if [ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null; then echo "$NAME is running" exit 0 else echo "$NAME is not running" exit 3 fi } case "$1" in start) start ;; stop) stop ;; restart) stop; start ;; status) status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit 0