【问题标题】:start-stop-daemon run with external script conditionstart-stop-daemon 在外部脚本条件下运行
【发布时间】:2022-01-22 20:31:55
【问题描述】:

我需要知道如何使用带有外部脚本条件的 start-stop-daemon 运行服务。类似于在 systemctl .service 文件中所做的事情,例如:

注意:我需要执行与 ExecCondition 参数相同的操作

[Unit]
Description=My description

[Service]
Type=simple
ExecCondition=/usr/local/bin/checksome.sh
ExecStart=mainscript.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

问候。

【问题讨论】:

    标签: linux service daemon systemctl start-stop-daemon


    【解决方案1】:

    我回应我的错误......

    Dentro del Directorio init.d se encuentra el fichero con el servicio que queremos modificar, por ejemplo el servicio emqx。 Tendremos algo como esto:

    do_start()
    {
        start-stop-daemon --start \
            --name emqx \
            --user emqx \
            --exec /usr/local/bin/checkconditionandrun.sh emqx -- start \
            || return 2
    }
    
    case "$1" in
    start)
        log_daemon_msg "Starting emqx"
        do_start
        case "$?" in
            0|1) log_end_msg 0 ;;
            2) log_end_msg 1
                exit 1
                ;;
        esac
        ;;
    stop)
        log_daemon_msg "Stopping emqx"
        do_stop
        case "$?" in
            0|1) log_end_msg 0 ;;
            2) log_end_msg 1
                exit 1
                ;;
        esac
        ;;
    

    La clave de todo esto está en dos cosas:

    1.- En la función do_start() el comando start-stop-daemon --start no debe de llamar directamente al comando "emqx start" lo que se hace es llamar a un script para verifique lo que necesitamos verificar ya continuación ese script ejecutará o no el comando pasado como parametro。

    2.- Ahora si queremos que nuestro servicio se reinicie automáticamente si ha fallado , tal como se haría mediante un .service con las entradas Restart=always y RestartSec=10, debemos saber lo siguiente:

    a) systemd es 兼容的 con los 脚本 heredados /etc/init.d de esta manera, cuando systemd carga definiciones de servicio, systemd-sysv-generator autogenera archivos .service sobre la marcha a partir de los scripts en /etc/ init.d.

    b) Podemos agregar configuración a un servicio autogenerado agregando archivos "drop-in" llamados "restart.conf" a una Caribbean con el siguiente nombre: /etc/systemd/system/nombreservicio.service.d/

    Teniendo en cuenta lo anterior y suponiendo que nuestro servicio se llame "emqx", podemos crear un fichero en la siguiente Caribbean:

    /etc/systemd/system/emqx.service.d/restart.conf

    con el siguiente contenido:

    [Service]
    Restart=always
    RestartSec=10
    

    De esta manera conseguimos que un servicio contenido en init.d podamos controlar tanto su arranque como suterior reintento de re-arranque por parte del propio systemd。

    相关信息:

    https://singlebrook.com/2017/10/23/auto-restart-crashed-service-systemd/

    https://www.freedesktop.org/software/systemd/man/systemd.service.html

    https://www.digitalocean.com/community/tutorial_series/how-to-configure-a-linux-service-to-start-automatically-after-a-crash-or-reboot

    【讨论】:

    • 其他人可能不理解您的解决方案。本网站以英文运作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 2012-06-23
    相关资源
    最近更新 更多