[NTLUG:Discuss] More shell scripting madness
. Daniel
xdesign at hotmail.com
Thu Jul 5 09:58:52 CDT 2007
I know it's hard to see, but I'm actually starting to learn this stuff
little by little.
Here's the purpose:
I upgraded the processor and video in my laptop. Now it gets warmer than I
like, especially during game play, which slows down when the processor and
video heat up. While I intend to improve the actual heatsink materials
(Copper is surprisingly hard to get in the form I need it... and EXPENSIVE)
I would like to keep the processor fans running.
As it turns out, the system is controlling the fans by itself based on
certain criteria. But there is also a handy little utility to simply turn
on the fan! It's called "i8kfan." Run i8kfan without parameters and it
will simply return with two numbers indicating the mode of the fans at that
moment. The values are 0, 1 and 2. So if both fans are off, it will
return "0 0" and if both are on high speed it will return "2 2".
So I wrote a loop that checks the fan status every two seconds and if it's
not "2 2" it will set the fans to "2 2" and go back to sleep. I then set
up an icon on my panel to start the process when I want to play a game so I
can prolong my "cool time."
Here's the problem though: Gnome shortcuts no longer seem to want to
launch processes in terminal. In earlier versions, there was a check box
to select this option. It was a good option to use when you were debugging
because you could see error messages streaming by or whatever. Now it's
gone and I can't run the script in a terminal window expect by hand...
which, of course, I don't wanna do.
So here's the script as simple as it is:
"i8kfanloop.sh"
-----
#!/bin/bash
loop=1
while [ loop ]
do
status=`i8kfan`
if [ "$status" != "2 2" ]
then
i8kfan 2 2
fi
sleep 2
done
-----
That's some pretty simple bash code right?
Here's what I'd like to add to it. I'd like to add some code that will
detect if a previous instance of this script is currently running and if it
is, kill it and exit. If it's not running, just go into the loop. So the
result would be, if I click the icon once, it runs the loop. If I click
the icon again, it will stop the loop.
I imagine some code that will get the shell script's process ID number and
stores it somewhere, say "/tmp/$username_i8kfanloop.pid" or something like
that. Then at the beginning of the script, it will look for said file and
compare the process ID recorded in the file with the process listing to see
if the process ID is there and actually the same script.
If the filename doesn't exist, create the PID file and enter the loop.
If the filename exists but the process doesn't, it should erase the file,
create a new PID file and enter the loop.
If the filename exists and the process exists but the PID doesn't match up
with the script name, then erase the file, create a new PID file and enter
the loop.
I feel confident that if I messed with this for a few hours, I'd be able to
cobble up something that works. But before I spend my work day on my
personal stuff, I'm willing to bet someone already has or knows about some
shell code out there that does this already. And I'm hoping that someone
will be kind and generous enough to paste their code into a reply so that I
could learn and adapt my skills further. :)
_________________________________________________________________
IE6の機能を強化した最新版ブラウザがMSNユーザー向けになって登場!
http://promotion.msn.co.jp/ie7/
More information about the Discuss
mailing list