The following summarizes the way I have this working. Note: the -f to the ssh command truly forks the process away from the script. Which isn't a huge deal but, I did have to add a killall ssh to get the init scrip to stop both the script and the ssh tunnel. Also in the init script the daemon function didn't work so I had to background the process. Final result to the init script: the init script (sshtund): start call: ---snip--- $ProgramFull & ---snip--- stop call: ---snip--- killproc $ProgramName killall $ProgramFork > /dev/null 2>&1 ---snip--- the script loop: ---snip--- while [ true ]; do pidof ssh if [ $? -eq 1 ]; then ssh -fnN2g -c $Crypt $LPort:$LHost $RUser@$RHost -L $RPort:$LHost:$LPort fi sleep 10 done this gives me quite a bit a flexibility and I feel it works well. The only problem I see is that it may be an issue if I had muliple ssh tunnels working on the same system. On Sat, 2004-06-12 at 12:11, Patrick Nelson wrote: > One way I tried is using pidof like this in the script sshtun: > > ---snip--- > while [ true ]; do > pidof ssh > if [ $? -eq 1 ]; then > ssh -nN2g -c $Crypt $LPort:$LHost $RUser@$RHost -L $RPort:$LHost:$LPort > fi > sleep 5 > done > ---snip--- > > which appears to work, recreating the ssh tunnel when it drops off. > Thoughts, questions, anecdotes? > > > On Sat, 2004-06-12 at 11:47, Patrick Nelson wrote: > > FC2 Uptodate > > > > I'm trying to figure out how to daemon'ize a script that I have to start > > an ssh port forwading tunnel. Here is how I'm doing it: > > > > the script (name is sshtun): > > ---snip--- > > while [ true ]; do > > ssh -nN2g -c $Crypt $LPort:$LHost $RUser@$RHost -L $RPort:$LHost:$LPort > > done > > ---snip--- > > > > the init script (sshtund): > > ---snip--- > > daemon $ProgramFull > > .... > > killproc $ProgramFull > > ---snip--- > > > > The problem: > > When I call service sshtund start, the ssh process does go to the > > background and sshtund never exits. > > > > So I tried this with the init: > > ---snip--- > > $ProgramFull & > > .... > > killproc $ProgramFull > > ---snip--- > > > > but then service sshtund stop doest work. So I changed the stop section > > of the init to: > > > > ---snip--- > > $ProgramFull & > > .... > > killall -qgs 9 $ProgramName > > ---snip--- > > > > where ProgramName is sshtun. And this works but all further processing > > of the init script (everything that follows the killall) doesn't get > > done and the init script returns. > > > > So, it appears that the ssh is holding the init script and tie'ing it to > > the ssh command but I can not seem to separate the init script from the > > program it calls (not sure if it is possible). OK thats cool, So I can > > give the ssh command (in the script sshtun) the -f option to put ssh in > > the background. But I have to get rid of the while-do-done which > > creates my real problem. So, my question is: > > > > Is there a best practice on scripting a process to make sure a > > background process is running? Or when a background process drops off > > it triggers an event that would attempt to start it up again? Any ideas > > would help. > > >