Cómo escribir un script de inicio basado en procd
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
}
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.