[NTLUG:Discuss] More shell scripting madness

Fred James fredjame at fredjame.cnc.net
Thu Jul 5 11:28:30 CDT 2007


. Daniel wrote:

>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/ 
>
>
>_______________________________________________
>http://www.ntlug.org/mailman/listinfo/discuss
>
>  
>
How about something like ...
x=`ps -ef | grep i8kfanloop | wc | awk '{ print $1 }'`
... followed by some sort of decision tree based on the value of $x ...
Hope that helps
Regards
Fred James




More information about the Discuss mailing list