Subject: Re: Running Cygwin as a serivce and automatically executing a script
From: Huijing Zhou <[email-masked]>
To: Dave <[email-masked]>
Cc: [email-masked]
Date: Thu, 11 Jul 2002 03:04:08 +0200

> I want to run Cygwin as a service on Windows 2000 Professional with service
> pack 2 and get Cygwin to automatically run a script (in this instance a Perl
> script).

What you means is, you want to run *bash* as a service, not cygwin. 
Since when we say cygwin, we either mean the cygwin1.dll, or the whole 
cygwin platform.

 > [...]
 >
> The batch files contains:
> 
> C:
> chdir C:\cygwin\bin
> bash --login -i
> CD ~
> CD mydir
> perl myperl.pl

The batch file is plainly wrong. Even if "bash --login -i" would succeed 
(which does not, as you later describe), the batch would hang here since 
bash is waiting for input and not getting any. "CD ~" will not be 
executed at all since it's actually outside bash. This means even if 
"bash --login -i" would time out (it definitely *does not*), "CD ~" and 
the other two lines after it will be executed in Windows command 
interpreter environment as a Windows command and not in bash, where "CD 
~" would fail since Windows does not know about "~".

> When I run the batch file normally it gets as far as opening the bash, using
> the currently logged in user (which happens to be administrator).

Exactly. bash opened and no further.

And if you want a "fake service" (like here) to run, test it first as 
normal programme (which you did, but without success). If the batch file 
fails "normally", how could it work as a service?

> When run as a service (with or without the service set to run as
> administrator) it loads the bash, but the bash reports it cannot find the
> /tmp dir. And it stops execution.

Where did you get this "report" by bash if the batch runs as a service 
(non-interactive and non-visible)? How does the exact wording of this 
report look like?

> In both instance the script is not loaded.

Well, more than one issue stands in its way.

> [...]
> 
> The reason I wish to run it as a service is to hide the Cygwin window, as I
> use the machine its on for many other things and having the bash window on
> the taskbar is a pain, as its not actually doing anything, once the script
> has been run.

Wrong. Either you want the script to run *once* when the system starts 
up (as you stated before), *before* the first user logs in. Or you want 
the script to run every time a user logs in. In first case you need to 
run it as a service, in second case run it in "Startup" folder or so. In 
a third case, if you want to run the script, say, daily, you may want to 
use Windows' "Scheduled Tasks".

> If there is another way to load a script automatically and hide the Cygwin
> window, I am all ears.

Besides the question of when to call the script, I think what you need 
first is to call bash correctly to start the script, something like:

bash -c perl myperl.pl

In any case, do not use "bash -i" which means "interactive" because you 
actually do not want to interact with bash here. In case you don't know, 
type "man bash" will give you a documentation about the bash shell.

Regards,

Huijing

-- 
Huijing Zhou <[email-masked]>
CIP Computer Lab, Faculty of Economics
University of Karlsruhe, Germany
http://www2.wiwi.uni-karlsruhe.de

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/