Init

**init** er i Unix og Unix-lignende operativsystemer den første prosessen som startes under oppstart av datamaskinen. Det er en daemon som kjører inntil systemet slås av. Den er den direkte eller indirekte foreldreprosessen til andre prosesser og adopterer automatisk alle foreldreløse prosesser. Init startes av operativsystemkjernen ved å bruke et hardkodet filnavn; en kjernepanikk inntreffer hvis kjernen er ute av stand til å starte den. Init tildeles vanligvis prosessidentifikator 1.

I UNIX System III og UNIX System V var funksjonaliteten til init forskjellig fra forsknings-Unix og dens BSD derivater. Bruken i de fleste Linux-distribusjoner har tradisjonelt benyttet den tradisjonelle init. En nylig variant på Linux-systemer er systemd, som stort sett er kompatibelt med System V. Slackware bruker BSD-stil oppstart, mens andre som Gentoo har deres egne versjoner.

Flere erstatninger av init-implementasjonen har blitt laget, og prøver å oppheve begrensninger i standardversjonene. De inkluderer launchd, Service Management Facility, systemd og Upstart. I de senere år har systemd blitt tatt i bruk av alle større Linux-distribusjoner.

## Eksempel: Init-script i Fedora
Red Hat erstattet SysVinit med systemd i Fedora versjon 15 og i Red Hat Enterprise Linux versjon 7. Her er et eksempel på SysVinit-script for eldre versjoner.

```c
#!/bin/sh
#
# <daemonname> <summary>
#
# chkconfig:   <default runlevel(s)> <start> <stop>
# description: <description, split multiple lines with \
#              a backslash>

### BEGIN INIT INFO
# Provides: 
# Required-Start: 
# Required-Stop: 
# Should-Start: 
# Should-Stop: 
# Default-Start: 
# Default-Stop: 
# Short-Description: 
# Description:      
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

exec="/path/to/<daemonname>"
prog="<service name>"
config="<path to major config file>"

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/$prog

start() {
    [ -x $exec ] || exit 5
    [ -f $config ] || exit 6
    echo -n $"Starting $prog: "
    # if not running, start it up here, usually something like "daemon $exec"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    # stop it here, often "killproc $prog"
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?
```


## Referanser