Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo escribir un script de inicio basado en procd

Cómo escribir un script de inicio basado en procd

El script de inicio de procd es algo similar al script de inicio original, pero la principal diferencia es que procd espera que el servicio se ejecute en primer plano.

Como script existente, debe comenzar con sh /etc/rc.common. Para compatibilidad, también se requiere la línea "USE_PROCD=1".

#!/bin/sh /etc/rc.common

USE_PROCD=1

Para iniciar un servicio, necesitamos una función 'start_service' , la función stop_service es opcional, solo cuando necesita hacer algo al detener el servicio. Se llama a stop_service() después de que procd finaliza el servicio. El servicio en sí debería ejecutarse en primer plano. (Obviamente

start_service() {

procd_open_instance

procd_set_param comando /sbin/your_service_daemon-b-a-foo

procd_set_param reaparece #respawn automáticamente Si algo muere, tenga cuidado si tiene un administrador de procesos de reemplazo

procd _ set _ param env SOME _ VARIABLE = momentos divertidos #Pasar variables de entorno al proceso

procd_set_param limita el núcleo. = "ilimitado" #Si necesita configurar ulimit para su proceso

Si estos archivos han cambiado, procd_set_param file/var/etc/your_service. conf #/etc/init d/your_service reload reiniciará. daemon

procd_set_param netdev dev #De manera similar, a menos que el ifindex de dev cambie

procd_set_param data name=value ...#De manera similar, a menos que los datos cambien

procd_close_instance

}

TODO: ¿Tablar el antiguo script de inicio de openwrt?

Para obtener la mayor información posible, consulte la documentación en la parte superior de procd.sh

p>

Procd se activa cuando los archivos de configuración/interfaces de red cambian

En versiones anteriores de OpenWrt, una característica llamada El sistema "ucitrack" intenta rastrear los archivos de configuración UCI y los procesos que dependen de cada uno. y reinícielos si es necesario. Esto también ha sido reemplazado por ubus/procd y ampliado para permitir la notificación de servicios cuando cambian las interfaces de red. Es útil para servicios como dnsmasq y software de proxy/enrutamiento que se preocupan por qué interfaces de red están en uso. y con qué configuración

Primero, para hacer que su servicio dependa simplemente de un archivo de configuración, agregue una cláusula "service_triggers()" a su script de inicio

service_triggers()

p>

{

procd_add_reload_trigger " UCI -file-name "

}

Esto configurará el enlace para que se emita 'reload_config' una llamada a '/etc/init.d/' yourinitscript>When "/ Recargar cuando cambien las sumas md5 de "etc/config/uci-file-name". Puede editar tantos archivos de configuración como desee, luego ejecute reload_config y procd se encargará de recargarlos todos. Tenga en cuenta que el archivo de configuración no ha cambiado y no se ha vuelto a cargar.

Si desea recargar explícitamente, aún debe emitir '/etc/init.d/<yourservice>t recargar manualmente.

De forma predeterminada, "recargar" resultará en una llamada de inicio/detención a menos que proporciones explícitamente una llamada "recargar()" en el script de inicio. No hay soporte (actualmente, r41147) para obtener el PID de un servicio de procd o enviar una señal a ese servicio en una rutina sobrecargada, pero esto debería ser posible pronto.

Reload()

{

Service_Reload

printf "Servicio recargado en %s" "$(fecha) Cargando " & gt& gt/tmp/somefile

}

Si desea/necesita que su servicio dependa de los cambios de red, simplemente modifique su sección service_triggers como se muestra a continuación.

Activador de servicio()

{

procd _ add _ reload _ trigger " UCI-file-name " " segundo-UCI-file "

procd _ add _ network _ trigger " LAN " | " etho 0 " FIXME - Esto todavía es un trabajo en progreso....

}

igmpproxy es (actualmente) el único servicio que requiere Aproveche esto, pero (con suerte) para cuando lea esto, dnsmasq al menos también se habrá actualizado.