it-swarm.com.de

Was ist der einfachste Weg, um mein altes Init-Skript in systemd zum Laufen zu bringen?

Ich möchte nicht das Richtige tun, indem ich ein neues systemd-Skript erstelle. Ich möchte nur, dass mein altes init-Skript wieder funktioniert, nachdem ich mein System auf ein Betriebssystem aktualisiert habe, das systemd verwendet.

Ich habe kurz untersucht, wie man Init-Skripte konvertiert und wie man Systemd-Skripte schreibt, aber ich bin sicher, dass es mehrere Stunden dauern würde, es richtig zu lernen und es richtig zu machen.

Die aktuelle Situation ist:

systemctl start solr
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.

Und:

Sudo service solr start
Failed to start solr.service: Unit solr.service failed to load: No such file or directory.

Im Moment möchte ich einfach wieder arbeiten. Was ist der Weg des geringsten Widerstands, um dies wieder zum Laufen zu bringen?

Aktualisierung

Ich wollte das nicht alles herausfinden - ich tat es wirklich nicht - aber ich muss und ich habe meinen ersten Hinweis gefunden:

Sudo systemctl enable solr
Synchronizing state for solr.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d solr defaults
insserv: warning: script 'K01solr' missing LSB tags and overrides
insserv: warning: script 'solr' missing LSB tags and overrides
Executing /usr/sbin/update-rc.d solr enable
update-rc.d: error: solr Default-Start contains no runlevels, aborting.

Die Inkompatibilitätsseite für systemd besagt Folgendes:

Informationen zur Abhängigkeit des LSB-Headers sind wichtig. Die SysV-Implementierungen auf vielen Distributionen verwendeten die in LSB-Init-Skript-Headern codierten Abhängigkeitsinformationen nicht oder nur in sehr begrenztem Umfang. Aus diesem Grund sind sie oft falsch oder unvollständig. systemd interpretiert diese Header jedoch vollständig und folgt ihnen zur Laufzeit genau

Ich denke, das bedeutet, dass mein Skript nicht funktioniert, bis das behoben ist.

Das fragliche Skript:

#!/bin/sh

# Prerequisites:
# 1. Solr needs to be installed at /usr/local/solr/example
# 2. daemon needs to be installed
# 3. Script needs to be executed by root
# 4. $INSTALL_ROOT must be set

# This script will launch Solr in a mode that will automatically respawn if it
# crashes. Output will be sent to /var/log/solr/solr.log. A pid file will be
# created in the standard location.

start () {
    echo -n "Starting solr..."

    # Reset ulimit or else get issues with too many open files (https://issues.Apache.org/jira/browse/SOLR-4)
    ulimit -n 10000

    # start daemon
    daemon --chdir='/usr/local/solr/example' --command "Java -jar -server start.jar -DINSTALL_ROOT=$INSTALL_ROOT" --respawn --output=/var/log/solr/solr.log --name=solr --verbose

    RETVAL=$?
    if [ $RETVAL = 0 ]
    then
        echo "done."
    else
        echo "failed. See error code for more information."
    fi
    return $RETVAL
}

stop () {
    # stop daemon
    echo -n "Stopping solr..."

    daemon --stop --name=solr  --verbose
    RETVAL=$?

    if [ $RETVAL = 0 ]
    then
        echo "done."
    else
        echo "failed. See error code for more information."
    fi
    return $RETVAL
}


restart () {
    daemon --restart --name=solr  --verbose
}


status () {
    # report on the status of the daemon
    daemon --running --verbose --name=solr
    return $?
}


case "$1" in
    start)
        start
    ;;
    status)
        status
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        sleep 15
        start
    ;;
    *)
        echo $"Usage: solr {start|status|stop|restart}"
        exit 3
    ;;
esac

exit $RETVAL
50
mlissner

Im Ernst, eine systemd-Einheitendatei ist für einen Dienst wie diesen oder für die meisten Dienste trivial zu schreiben.

Dies sollte Sie zu 95% auf den Weg dorthin bringen. Geben Sie dies zum Beispiel in /etc/systemd/system/solr.service

[Unit]
Description=Apache Solr
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
EnvironmentFile=/etc/courtlistener
WorkingDirectory=/usr/local/solr/example
ExecStart=/usr/bin/Java -jar -server -Xmx${CL_SOLR_XMX} start.jar -DINSTALL_ROOT=${INSTALL_ROOT}
Restart=on-failure
LimitNOFILE=10000

[Install]
WantedBy=multi-user.target

Beachten Sie das Zeug, das nicht hier ist, wie die Protokolldatei und so; systemd erfasst und protokolliert automatisch die Dienstausgabe unter dem Namen des Dienstes.

34
Michael Hampton

Für mich war es einfacher, den Init-Info-Block wie vorgeschlagen in den Header einzufügen hier :

#!/bin/sh
### BEGIN INIT INFO
# Provides:          solr
# Required-Start:    
# Required-Stop:     
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: solr
# Description:       solr
### END INIT INFO

Führen Sie dann Sudo systemctl enable solr.

17
eadmaster

Eine weitere Lösung zur Verwendung des solr-Legacy-Init-Skripts mit systemd:

systemctl daemon-reload  
systemctl enable solr  
systemctl start solr  
8
grégory eve

Es ist bequemer, Solr mit bereitgestelltes Startskript auszuführen.

Die systemd-Einheitendatei sieht folgendermaßen aus:

[Unit]
Description=Apache Solr for Nextcloud's nextant app fulltext indexing
After=syslog.target network.target remote-fs.target nss-lookup.target systemd-journald-dev-log.socket
Before=nginx.service

[Service]
Type=forking
User=solr
WorkingDirectory=/path/to/solr/server
ExecStart=/path/to/solr/bin/solr start
ExecStop=/path/to/solr/bin/solr stop
Restart=on-failure

[Install]
WantedBy=multi-user.target

Beachten Sie, dass Sie Ihre Umgebungsvariablen auch verwenden können, indem Sie EnvironmentFile zum Abschnitt [Service] Hinzufügen. Das Skript bin/solr Respektiert Umgebungsvariablen. Schauen Sie einfach hinein.

4

Ich hatte den gleichen Fehler beim Versuch, ein LSB-Init-Skript unter CentOS 7 zu verwenden. Die Hauptursache war, dass das Skript eine symbolische Verknüpfung war. Einmal durch eine Kopie des Originals ersetzt, funktionierte alles einwandfrei.

1
gatopeich

Auf Debian getestet: Fügen Sie am Anfang des Skripts '_SYSTEMCTL_SKIP_REDIRECT = OHYES' hinzu.

Systemd-Fanboys mögen es vielleicht nicht, aber hey, ich mag systemd nicht, also da :).

1
Guy Egozy