Why won't my script run?
"Terrell Prudé Jr."
microman at cmosnetworks.com
Sun Mar 15 21:42:56 UTC 2009
_______________________________
Do you GNU <http://www.gnu.org>?
Microsoft Free since 2003 <http://www.cmosnetworks.com>--the ultimate
antivirus protection!
Nigel Ridley wrote:
> <div class="moz-text-flowed" style="font-family: -moz-fixed">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
The odd part is that the script certainly is executing, and apparently
so is acerfand. But acerfand is apparently exiting immediately
thereafter. Given that /etc/rc.local executes in root's context, this
is *very* weird behaviour indeed.
Unless there's something horribly broken in Ubuntu, then it shouldn't
matter one damned bit how you start the daemon, be it in /etc/rc.local
or in a SysV init script. I put stuff in /etc/rc.local all the time on
many distros, including Debian and Ubuntu Dapper/Hardy.
Let's try a couple of things, just to make _absolutely_ sure
/usr/local/bin/acerfand is starting. Tweak /etc/rc.local to look like this:
#!/bin/sh -e
echo "Starting acerfand..." # new line
/usr/local/bin/acerfand
echo "Done." # new line
sleep 1
exit 0
If that doesn't work, then try also adding " &" after "acerfand". This
will start the process in the background. Yes, I know, it automatically
daemonizes, but just give it a shot anyway and see if it stays alive.
It can't hurt to try.
--TP
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/kubuntu-users/attachments/20090315/2d45b8d0/attachment.html>
More information about the kubuntu-users
mailing list