it-swarm.com.de

Autostart-Service

Ich suche nach einer Möglichkeit, einen Dienst so zu konfigurieren, dass er automatisch ausgeführt wird, wenn er aus irgendeinem Grund stoppt. Momentan habe ich einen Cronjob eingerichtet, der jede Minute überprüft, ob der Dienst ausgeführt wird, und ihn neu startet, wenn er abgestürzt ist, aber das scheint langweilig. Wie kann ich das richtig machen?

Ich habe einige fragwürdige Skripte hinzugefügt, damit der Dienst funktioniert

[email protected]:~$ Sudo cat /etc/init.d/my-service
#!/bin/sh
### BEGIN INIT INFO
# Provides: my-service
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

dir="/var/www/html/my-service"
cmd="nodejs chat.js"
user="www-data"

name=`basename $0`
pid_file="/var/run/$name.pid"
stdout_log="/var/log/$name.log"
stderr_log="/var/log/$name.err"

get_pid() {
    cat "$pid_file"
}

is_running() {
    [ -f "$pid_file" ] && ps `get_pid` > /dev/null 2>&1
}

case "$1" in
    start)
    if is_running; then
        echo "Already started"
    else
        echo "Starting $name"
        cd "$dir"
        if [ -z "$user" ]; then
            Sudo $cmd >> "$stdout_log" 2>> "$stderr_log" &
        else
            Sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
        fi
        echo $! > "$pid_file"
        if ! is_running; then
            echo "Unable to start, see $stdout_log and $stderr_log"
            exit 1
        fi
    fi
    ;;
    stop)
    if is_running; then
        echo -n "Stopping $name.."
        kill `get_pid`
        for i in {1..10}
        do
            if ! is_running; then
                break
            fi

            echo -n "."
            sleep 1
        done
        echo

        if is_running; then
            echo "Not stopped; may still be shutting down or shutdown may have f                                                                                                                               ailed"
            exit 1
        else
            echo "Stopped"
            if [ -f "$pid_file" ]; then
                rm "$pid_file"
            fi
        fi
    else
        echo "Not running"
    fi
    ;;
    restart)
    $0 stop
    if is_running; then
        echo "Unable to stop, will not attempt to start"
        exit 1
    fi
    $0 start
    ;;
    status)
    if is_running; then
        echo "Running"
    else
        echo "Stopped"
        exit 1
    fi
    ;;
    *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit 0

Und auch my-service.service

[email protected]:~$ cat /etc/systemd/system/my-service.service
[Unit]
Description=my-service daemon

[Service]
ExecStart=/usr/bin/nodejs /var/www/html/my-service/chat.js
Type=simple
User=root
Group=root
Restart=always

[Install]
WantedBy=multi-user.target

Zum Beispiel, wenn der Computer neu startet, erhalte ich diesen Status

Jan 24 10:54:41 x systemd[1]: my-service.service: Service hold-off time over, scheduling restart.
Jan 24 10:54:41 x systemd[1]: Stopped my-service daemon.
Jan 24 10:54:41 x systemd[1]: my-service.service: Start request repeated too quickly.
Jan 24 10:54:41 x systemd[1]: Failed to start my-service daemon.
2
php_nub_qq

Sie können das Tool monit verwenden. Es ist sehr klein und nützlich für jede Art von Prozessmanagement und -überwachung.

Nachdem Sie das Binärpaket von dieser Link heruntergeladen haben, können Sie es in einen beliebigen Ordner auf Ihrem System extrahieren und anschließend zwei Dateien aus dem Paket auf Ihr System kopieren, um es zu installieren:

cd /path/to/monit/folder
cp ./bin/monit /usr/sbin/monit
cp ./conf/monitrc /etc/monitrc  

Bearbeiten Sie nun /etc/monitrc nach Ihren Wünschen ( Referenzdokument ). Erstellen Sie anschließend eine Init-Steuerdatei , um die Überwachung beim Start zu aktivieren. Beginnen Sie nun mit der Überwachung auf folgende Weise:

initctl reload-configuration
start monit
1
Ghasem Pahlavan