init.d – ¿Cuál es la forma más fácil de hacer que mi antiguo script de inicio funcione en systemd?

Pregunta:

No quiero hacer lo correcto creando un nuevo script systemd, solo quiero que mi antiguo script de inicio vuelva a funcionar ahora que he actualizado mi sistema a un sistema operativo que usa systemd.

Investigué brevemente cómo convertir scripts de inicio y cómo escribir scripts systemd, pero estoy seguro de que aprenderlo correctamente y hacerlo bien me llevaría varias horas.

La situación actual es:

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

Y:

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

Ahora mismo, solo quiero volver al trabajo. ¿Cuál es el camino de menor resistencia para que esto vuelva a funcionar?

Actualizaciones

No quería resolver todo esto, realmente no lo hice, pero tengo que hacerlo y descubrí mi primera pista:

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.

La página de incompatibilidades para systemd dice que:

La información de dependencia del encabezado LSB es importante. Las implementaciones de SysV en muchas distribuciones no usaron la información de dependencia codificada en los encabezados del script de inicio LSB, o la usaron solo de formas muy limitadas. Debido a eso, a menudo son incorrectos o incompletos. systemd, sin embargo, interpreta completamente estos encabezados y los sigue de cerca en tiempo de ejecución

Creo que eso significa que mi guión no funcionará hasta que esté arreglado.

El guión en cuestión:

#!/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

Respuesta:

En serio, escribir un archivo de unidad systemd es trivial para un servicio como este … o para la mayoría de los servicios.

Esto debería llevarlo aproximadamente al 95% del camino. Pon esto en, por ejemplo, /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

Tenga en cuenta las cosas que no están aquí, como el archivo de registro y demás; systemd capturará y registrará automáticamente la salida del servicio con el nombre del servicio.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım