[lm-sensors] [Fancontrol] better support for init script error handling

foo bar abi1789 at googlemail.com
Sat May 1 20:16:46 CEST 2010


On 05/01/2010 06:42 PM, Jean Delvare wrote:
> Hi,
>
> On Sat, 01 May 2010 17:29:04 +0200, PyroPeter wrote:
>    
>> Some months ago, the /etc/fancontrol syntax changed,
>>      
> Please be specific. The syntax never changed, it was extended in
> fully backwards compatible ways, this should never have caused
> fancontrol to fail, unless you downgraded it.
>
>    
At the 28th of February I had to add DEVPATH and DEVNAME settings to my 
config file.
Of cause this is my fault, because I manually wrote the config.
>> and fancontrol
>> exited right after startup, but the init script stated success.
>>
>> Currently there is no reliable way for a init script to check if
>> fancontrol started up properly.
>>      
> Running it using startproc should do the trick. That's what openSUSE
> does.
>
>    
After reading the manpage online, I get the impression that startproc 
just has the advantage of checking for an already running daemon before 
starting it. But I will take a look at a SUSE initscript.

Besides that, I do not get how you should check if fancontrol started up 
properly.
The only way I could imagine is: you run fancontrol, wait some seconds 
and then check for the pid-file. I won't have to tell anyone how dirty 
that is.
>> As fancontrol is a deamon preventing hardware damage, reliability should
>> be of first priority.
>>      
> This is incorrect. fancontrol is a daemon _causing_ hardware damage, if
> anything. The initial state of your system should be safe, so
> fancontrol not starting should never be a safety issue.
>
>    
Not for me. My mainboard has some kind of broken fan control that always 
sets a very low speed, which makes it acoustically indistinguishable 
from fancontrol but fails at high CPU loads. But that is not a 
fancontrol issue at the first point.
>> I would suggest adding a argument to fancontrol that makes it start up,
>> check config syntax and write permissions, and than fork to the
>> background, or return a positive exit code.
>>
>>
>> I wrote a kind of proof of concept that simply uses the existing
>> bash-script and "forks" by reexecuting itself in the background:
>>
>>   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>
>> diff -ru lm_sensors-3.1.2-1/usr/sbin/fancontrol
>> lm_sensors-3.1.2-1_pyropeter/usr/sbin/fancontrol
>> --- lm_sensors-3.1.2-1/usr/sbin/fancontrol    2010-02-03
>> 03:45:15.000000000 +0100
>> +++ lm_sensors-3.1.2-1_pyropeter/usr/sbin/fancontrol    2010-03-07
>> 01:37:09.000000000 +0100
>> @@ -5,7 +5,9 @@
>>    #
>>    # Version 0.70
>>    #
>> -# Usage: fancontrol [CONFIGFILE]
>> +# Usage: fancontrol [-D] [CONFIGFILE]
>> +#
>> +# (-D causes fancontrol to 'fork' to the background after some tests)
>>    #
>>    # Dependencies:
>>    #   bash, egrep, sed, cut, sleep, readlink, lm_sensors :)
>> @@ -43,6 +45,12 @@
>>    #DEBUG=1
>>    MAX=255
>>
>> +DAEMON=0
>> +if [ "$1" = "-D" ]; then
>> +    DAEMON=1
>> +    shift
>> +fi
>> +
>>    declare -i pwmval
>>
>>    function LoadConfig {
>> @@ -303,7 +311,6 @@
>>        echo "File $PIDFILE exists, is fancontrol already running?"
>>        exit 1
>>    fi
>> -echo $$>  "$PIDFILE"
>>
>>    # $1 = pwm file name
>>    function pwmdisable()
>> @@ -475,6 +482,14 @@
>>        let fcvcount=$fcvcount+1
>>    done
>>
>> +if [ "$DAEMON" -gt 0 ]; then
>> +    echo "Forking..."
>> +    $0 $*&>  /dev/null&
>> +    exit 0
>> +fi
>> +
>> +echo $$>  "$PIDFILE"
>> +
>>    echo 'Starting automatic fan control...'
>>
>>    # main loop calling the main function at specified intervals
>>
>>   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>
>> I am not subscribed to this mailing list, so you need to CC me.
>>
>>      
> This means that the checks will be done twice.
There could be a second argument that skips the tests. But I don't think 
parsing a 400B file two time is going to harm.
> And if the checks are
> somehow incomplete, fancontrol may still fail despite the fork being
> successful, so it is unreliable by design.
>
>    
What do you mean by "somehow incomplete"?
I can't imagine a case where the old behavior is more reliable than the 
one I supposed, unless there are bugs in the implementation.

(Btw. I just noticed the fork itself could break in some cases, so it 
needs an additional if-clause :-P)
> If startproc works for you, you should use it.
>
>    




More information about the lm-sensors mailing list