ModemManager: refactoring procd init script
The way the init script is written now, we get a bad output when calling the ubus service backend. ubus call service list "{'verbose':true,'name':'modemmanager'}" >{ > "modemmanager": { > "instances": { > "instance1": { > "running": true, > "pid": 20511, > "command": [ > "sh", > "-c", > ". >/usr/share/ModemManager/modemmanager.common; \t >mkdir -m 0755 -p /var/run/modemmanager; \t >mm_cleanup_interfaces; \t >( mm_report_events_from_cache ) >/dev/null 2>&1 & \t >/usr/sbin/ModemManager" > ], > "term_timeout": 5, > "respawn": { > "threshold": 3600, > "timeout": 5, > "retry": 5 > }, > "pidfile":"/var/run/modemmanager/modemmanager.pid" > } > } > } >}" I also get the output in the log that the PID file cannot be created. > daemon.err procd: Failed to remove pidfile: :No such file or directory The changes in this commit fixes this issues, by moving startup into a wrapper script. Signed-off-by: Florian Eckert <fe@dev.tdt.de>
This commit is contained in:
parent
4be2a5b737
commit
0b027b131c
3 changed files with 38 additions and 6 deletions
|
@ -98,6 +98,7 @@ define Package/modemmanager/install
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/usr/sbin
|
$(INSTALL_DIR) $(1)/usr/sbin
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ModemManager $(1)/usr/sbin
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ModemManager $(1)/usr/sbin
|
||||||
|
$(INSTALL_BIN) ./files/usr/sbin/ModemManager-wrapper $(1)/usr/sbin
|
||||||
|
|
||||||
$(INSTALL_DIR) $(1)/usr/bin
|
$(INSTALL_DIR) $(1)/usr/bin
|
||||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mmcli $(1)/usr/bin
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mmcli $(1)/usr/bin
|
||||||
|
|
|
@ -22,14 +22,12 @@ start_service() {
|
||||||
# it starts.
|
# it starts.
|
||||||
#
|
#
|
||||||
# All these commands need to be executed on every MM start, even after
|
# All these commands need to be executed on every MM start, even after
|
||||||
# procd-triggered respawns, which is why they're all included as instance command
|
# procd-triggered respawns, which is why this is wrapped in a startup
|
||||||
|
# wrapper script called '/usr/sbin/ModemManager-wrapper'.
|
||||||
#
|
#
|
||||||
|
. /usr/share/ModemManager/modemmanager.common
|
||||||
procd_open_instance
|
procd_open_instance
|
||||||
procd_set_param command sh -c ". /usr/share/ModemManager/modemmanager.common; \
|
procd_set_param command /usr/sbin/ModemManager-wrapper
|
||||||
mkdir -m 0755 -p ${MODEMMANAGER_RUNDIR}; \
|
|
||||||
mm_cleanup_interfaces; \
|
|
||||||
( mm_report_events_from_cache ) >/dev/null 2>&1 & \
|
|
||||||
/usr/sbin/ModemManager"
|
|
||||||
procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
|
procd_set_param respawn "${respawn_threshold:-3600}" "${respawn_timeout:-5}" "${respawn_retry:-5}"
|
||||||
procd_set_param pidfile "${MODEMMANAGER_PID_FILE}"
|
procd_set_param pidfile "${MODEMMANAGER_PID_FILE}"
|
||||||
procd_close_instance
|
procd_close_instance
|
||||||
|
|
33
net/modemmanager/files/usr/sbin/ModemManager-wrapper
Normal file
33
net/modemmanager/files/usr/sbin/ModemManager-wrapper
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
trap_with_arg() {
|
||||||
|
func="$1" ; shift
|
||||||
|
for sig ; do
|
||||||
|
# shellcheck disable=SC2064
|
||||||
|
trap "$func $sig" "$sig"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
func_trap() {
|
||||||
|
logger "ModemManager-wrapper[$$]" "Sending signal ${1}..."
|
||||||
|
kill "-${1}" "$CHILD" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
. /usr/share/ModemManager/modemmanager.common
|
||||||
|
|
||||||
|
trap_with_arg func_trap INT TERM KILL
|
||||||
|
|
||||||
|
mkdir -p "${MODEMMANAGER_RUNDIR}"
|
||||||
|
chmod 0755 "${MODEMMANAGER_RUNDIR}"
|
||||||
|
mm_cleanup_interfaces
|
||||||
|
|
||||||
|
/usr/sbin/ModemManager "$@" 1>/dev/null 2>/dev/null &
|
||||||
|
CHILD="$!"
|
||||||
|
sleep 2
|
||||||
|
mm_report_events_from_cache
|
||||||
|
|
||||||
|
wait "$CHILD"
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
Loading…
Reference in a new issue