Why won't my script run?

Nigel Ridley nigel at prayingforisrael.net
Sat Mar 14 18:43:14 UTC 2009


Howard Coles Jr. wrote:
> On Saturday 14 March 2009 12:07:21 pm Mark Greenwood wrote:
>> Another question for the boffins..
>>
>> My Acer Aspire One needs a special script to control the fan. This script
>> is called /usr/local/bin/acerfand and, when I run it from the command line
>> it does indeed control the fan. acerfand is a bash script which daemonises
>> itself using magic I do not understand.
>>
>> To get it to start at boot I'm instructed to place the command line into
>> /etc/rc.local, so ignoring comments my /etc/rc.local now looks like
>>
>> #!/bin/sh -e
>> /usr/local/bin/acerfand
>> exit 0
>>
>> If I run 'sudo /etc/rc.local' from the command line my fan script starts
>> running, the fan is being controlled and I can see acerfand as a running
>> process.
>>
>> On boot however, the script starts and then immediately exits (I put debug
>> in, I can see it in syslog starting up and then exiting). There is no
>> running process called acerfand after boot. Again, I type 'sudo
>> /etc/rc.local' at a command line and now there is a running acerfand
>> process.
>>
>> Why the different behaviour at boot, and how can I make it work?
>>
>> It worked on Mandriva.... ;)
>>
>> Thanks,
>>
>> Mark
> 
> It would be easier to copy your fan control script into the /etc/init.d 
> directory and then add it to the /etc/rc#.d/ as a softlink with either 
> "S##acerfan" or "K##acerfan"  (s is for start and the number is the order in 
> which you want it to start, K is for kill or stop, and again the number 
> indicates when you want it to stop relative to the other K's in the 
> directory.).
> 
> create a "acerfan" file (using /bin/bash instead of sh as its default on most 
> Debian based distros) in /etc/init.d with the contents of what you put in 
> rc.local (leaving off the "exit 0" line).
> then softlink the script in rc2.d (default runlevel in Debian based distros) 
> as follows:
> ln -s /etc/init.d/acerfan /etc/rc2.d/S99acerfan
> ln -s /etc/init.d/acerfan /etc/rc6.d/K03acerfan
> that last line is optional.
> Then see what happens.
> 
> 

The correct Debian way (and I suppose it [still] applies to *ubuntu) is:

[quote]
Suppose a system needs to execute script foo on start-up, or on entry to a particular (System V) 
runlevel. Then the system administrator should:

     * Enter the script foo into the directory /etc/init.d/.

     * Run the Debian command update-rc.d with appropriate arguments, to specify which runlevels 
should start the service, and which runlevels should stop the service.

     * Consider rebooting the system to check that the service starts correctly (assuming that 
you've asked for it to be started in the default runlevel). Otherwise, manually start it by 
running `/etc/init.d/foo start'.

One might, for example, cause the script foo to execute at boot-up, by putting it in /etc/init.d/ 
and running update-rc.d foo defaults 19. The argument `defaults' refers to the default runlevels, 
which means (at least in absence of any LSB comment block to the contrary) to start the service 
in runlevels 2 through 5, and to stop the service in runlevels 0, 1 and 6. (Any LSB Default-Start 
and Default-Stop directives in foo take precedence when using the sysv-rc version of update-rc.d, 
but are ignored by the current (v0.8.10) file-rc version of update-rc.d.) The argument `19' 
ensures that foo is called after all scripts whose number is less than 19 have completed, and 
before all scripts whose number is 20 or greater.
[end quote]
(Taken from: http://www.debian.org/doc/FAQ/ch-customizing.en.html (11.6)

Blessings,

Nigel




More information about the kubuntu-users mailing list