diff mbox

[OpenWrt-Devel,RFC] procd: Allow to enable endless respawning of services

Message ID 1442849183-9418-1-git-send-email-helmut.schaa@googlemail.com
State RFC
Headers show

Commit Message

Helmut Schaa Sept. 21, 2015, 3:26 p.m. UTC
Extend /etc/config/system with a parameter to enable
infinite respawn mode:

	config system
        	option service_endless_respawn 1

All services that don't specify specific respawn parameters
will get their defaults added by procd.sh and if service_endless_respawn
is set respawn_retry will be set to -1. This makes procd to
respawn the service forever.

Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
---
 package/system/procd/files/procd.sh | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Etienne Champetier Sept. 21, 2015, 4:05 p.m. UTC | #1
Hi,

2015-09-21 17:26 GMT+02:00 Helmut Schaa <helmut.schaa@googlemail.com>:

> Extend /etc/config/system with a parameter to enable
> infinite respawn mode:
>
>         config system
>                 option service_endless_respawn 1
>

why not "service_respawn_retry", which set "respawn_retry" default value
(if i want to set 20 instead of -1, so a bad service stop using cpu at one
point)



>
> All services that don't specify specific respawn parameters
> will get their defaults added by procd.sh and if service_endless_respawn
> is set respawn_retry will be set to -1. This makes procd to
> respawn the service forever.
>
> Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
> ---
>  package/system/procd/files/procd.sh | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/package/system/procd/files/procd.sh
> b/package/system/procd/files/procd.sh
> index e83e75c..04111b9 100644
> --- a/package/system/procd/files/procd.sh
> +++ b/package/system/procd/files/procd.sh
> @@ -316,6 +316,18 @@ _procd_append_param() {
>  }
>
>  _procd_close_instance() {
> +       local respawn_vals
> +       if json_select respawn ; then
> +               json_get_values respawn_vals
> +               if [ -z "$respawn_vals" ]; then
> +                       # Set respawn defaults
> +                       local respawn_retry
> +                       [[ -n "$(uci_get system.@system[0].service_endless_respawn)"
> ]] && respawn_retry=-1
> +                       _procd_add_array_data 3600 5 ${respawn_retry:-5}
> +               fi
> +               json_select ..
> +       fi
> +
>         json_close_object
>  }
>
> --
> 1.8.4.5
>
>
Yousong Zhou Sept. 21, 2015, 4:14 p.m. UTC | #2
Hi, Helmut

On 21 September 2015 at 23:26, Helmut Schaa <helmut.schaa@googlemail.com> wrote:
> Extend /etc/config/system with a parameter to enable
> infinite respawn mode:
>
>         config system
>                 option service_endless_respawn 1
>
> All services that don't specify specific respawn parameters
> will get their defaults added by procd.sh and if service_endless_respawn
> is set respawn_retry will be set to -1. This makes procd to
> respawn the service forever.

How about making it a separate section like "config service", then we
can later add other default service options, e.g. "limits
core=unlimited".

>
> Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
> ---
>  package/system/procd/files/procd.sh | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/package/system/procd/files/procd.sh b/package/system/procd/files/procd.sh
> index e83e75c..04111b9 100644
> --- a/package/system/procd/files/procd.sh
> +++ b/package/system/procd/files/procd.sh
> @@ -316,6 +316,18 @@ _procd_append_param() {
>  }
>
>  _procd_close_instance() {
> +       local respawn_vals
> +       if json_select respawn ; then
> +               json_get_values respawn_vals
> +               if [ -z "$respawn_vals" ]; then
> +                       # Set respawn defaults
> +                       local respawn_retry
> +                       [[ -n "$(uci_get system.@system[0].service_endless_respawn)" ]] && respawn_retry=-1

I think the convention here is to use "[ ]" instead of "[[ ]]".  also
please use something like "$(uci -q get ...)" or "$(uci get ...
2>/dev/null)" to squash the possible "Entry not found" error there.

Regards,

                yousong

> +                       _procd_add_array_data 3600 5 ${respawn_retry:-5}
> +               fi
> +               json_select ..
> +       fi
> +
>         json_close_object
>  }
>
> --
> 1.8.4.5
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
Helmut Schaa Sept. 22, 2015, 8:45 a.m. UTC | #3
On Mon, Sep 21, 2015 at 6:14 PM, Yousong Zhou <yszhou4tech@gmail.com> wrote:
> Hi, Helmut
>
> On 21 September 2015 at 23:26, Helmut Schaa <helmut.schaa@googlemail.com> wrote:
>> Extend /etc/config/system with a parameter to enable
>> infinite respawn mode:
>>
>>         config system
>>                 option service_endless_respawn 1
>>
>> All services that don't specify specific respawn parameters
>> will get their defaults added by procd.sh and if service_endless_respawn
>> is set respawn_retry will be set to -1. This makes procd to
>> respawn the service forever.
>
> How about making it a separate section like "config service", then we
> can later add other default service options, e.g. "limits
> core=unlimited".

Makes sense I guess.

>>
>> Signed-off-by: Helmut Schaa <helmut.schaa@googlemail.com>
>> ---
>>  package/system/procd/files/procd.sh | 12 ++++++++++++
>>  1 file changed, 12 insertions(+)
>>
>> diff --git a/package/system/procd/files/procd.sh b/package/system/procd/files/procd.sh
>> index e83e75c..04111b9 100644
>> --- a/package/system/procd/files/procd.sh
>> +++ b/package/system/procd/files/procd.sh
>> @@ -316,6 +316,18 @@ _procd_append_param() {
>>  }
>>
>>  _procd_close_instance() {
>> +       local respawn_vals
>> +       if json_select respawn ; then
>> +               json_get_values respawn_vals
>> +               if [ -z "$respawn_vals" ]; then
>> +                       # Set respawn defaults
>> +                       local respawn_retry
>> +                       [[ -n "$(uci_get system.@system[0].service_endless_respawn)" ]] && respawn_retry=-1
>
> I think the convention here is to use "[ ]" instead of "[[ ]]".  also
> please use something like "$(uci -q get ...)" or "$(uci get ...
> 2>/dev/null)" to squash the possible "Entry not found" error there.

uci_get from /lib/config/uci.sh handles that just fine.

Helmut
diff mbox

Patch

diff --git a/package/system/procd/files/procd.sh b/package/system/procd/files/procd.sh
index e83e75c..04111b9 100644
--- a/package/system/procd/files/procd.sh
+++ b/package/system/procd/files/procd.sh
@@ -316,6 +316,18 @@  _procd_append_param() {
 }
 
 _procd_close_instance() {
+	local respawn_vals
+	if json_select respawn ; then
+		json_get_values respawn_vals
+		if [ -z "$respawn_vals" ]; then
+			# Set respawn defaults
+			local respawn_retry
+			[[ -n "$(uci_get system.@system[0].service_endless_respawn)" ]] && respawn_retry=-1
+			_procd_add_array_data 3600 5 ${respawn_retry:-5}
+		fi
+		json_select ..
+	fi
+
 	json_close_object
 }