I'm having an issue with Win32 Service
I have a simple script that I want to run as a service however the service
won't start (timeout issue). I've tried several things but nothing I do
seems to make any difference at all.
Here is the code:
begin
require 'rubygems'
require 'win32/service'
require 'chronic'
include Win32
class Daemon
def service_init
test_log = File.new("path_to_where_it_goes", "w")
test_log.puts "got to init"
test_log.close
end
def service_main
while running?
if Time.now < Chronic.parse('today 10:00pm')
sleep(Chronic.parse('today 10:00pm') - Time.now)
`shutdown /s /t:60`
else
sleep(Chronic.parse('tomorrow 10:00pm') - Time.now)
`shutdown /s /t:60`
end
end
end
end
rescue Exception
logfile = File.new("path_to_logfile", "w")
logfile.puts $!
logfile.close
end
Daemon.mainloop
I get absolutely no feedback from the script it's self. In the even log it
says the service didn't respond within 30 seconds. Oddly enough it decides
this after a second or two. I've tried the script with different code in
the service_init method and without a service_init method it doesn't seem to
make any difference.
I realize this would be easier with a task but for reasons beyond my control
the task scheduler is turned off on all classroom and lab computers.
···
--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)
There's no shell associated with a service, so doing backticks or
system commands in a service is a Bad Idea. Also, as of version 0.6.0
STDIN, STDOUT and STDERR are redirected to NUL by default, so you'll
have to reopen STDERR to a log file if you want to see the full output
(what you saw there happened before they were redirected).
My recommendation is not to use backticks but to use WMI +
Win32_OperatingSystem via OLE. You can find details at:
Regards,
Dan
···
On May 5, 6:24 pm, "Glen Holcomb" <damnbig...@gmail.com> wrote:
I'm having an issue with Win32 Service
I have a simple script that I want to run as a service however the service
won't start (timeout issue). I've tried several things but nothing I do
seems to make any difference at all.
Here is the code:
begin
require 'rubygems'
require 'win32/service'
require 'chronic'
include Win32
class Daemon
def service_init
test_log = File.new("path_to_where_it_goes", "w")
test_log.puts "got to init"
test_log.close
end
def service_main
while running?
if Time.now < Chronic.parse('today 10:00pm')
sleep(Chronic.parse('today 10:00pm') - Time.now)
`shutdown /s /t:60`
else
sleep(Chronic.parse('tomorrow 10:00pm') - Time.now)
`shutdown /s /t:60`
end
end
end
end
rescue Exception
logfile = File.new("path_to_logfile", "w")
logfile.puts $!
logfile.close
end
Daemon.mainloop
I get absolutely no feedback from the script it's self. In the even log it
says the service didn't respond within 30 seconds. Oddly enough it decides
this after a second or two. I've tried the script with different code in
the service_init method and without a service_init method it doesn't seem to
make any difference.
I realize this would be easier with a task but for reasons beyond my control
the task scheduler is turned off on all classroom and lab computers.
Thanks, I'll give it a shot.
···
On Mon, May 5, 2008 at 6:47 PM, Daniel Berger <djberg96@gmail.com> wrote:
On May 5, 6:24 pm, "Glen Holcomb" <damnbig...@gmail.com> wrote:
> I'm having an issue with Win32 Service
>
> I have a simple script that I want to run as a service however the
service
> won't start (timeout issue). I've tried several things but nothing I do
> seems to make any difference at all.
>
> Here is the code:
>
> begin
> require 'rubygems'
> require 'win32/service'
> require 'chronic'
>
> include Win32
>
> class Daemon
> def service_init
> test_log = File.new("path_to_where_it_goes", "w")
> test_log.puts "got to init"
> test_log.close
> end
>
> def service_main
> while running?
> if Time.now < Chronic.parse('today 10:00pm')
> sleep(Chronic.parse('today 10:00pm') - Time.now)
> `shutdown /s /t:60`
> else
> sleep(Chronic.parse('tomorrow 10:00pm') - Time.now)
> `shutdown /s /t:60`
> end
> end
> end
> end
> rescue Exception
> logfile = File.new("path_to_logfile", "w")
> logfile.puts $!
> logfile.close
> end
>
> Daemon.mainloop
>
> I get absolutely no feedback from the script it's self. In the even log
it
> says the service didn't respond within 30 seconds. Oddly enough it
decides
> this after a second or two. I've tried the script with different code
in
> the service_init method and without a service_init method it doesn't
seem to
> make any difference.
>
> I realize this would be easier with a task but for reasons beyond my
control
> the task scheduler is turned off on all classroom and lab computers.
There's no shell associated with a service, so doing backticks or
system commands in a service is a Bad Idea. Also, as of version 0.6.0
STDIN, STDOUT and STDERR are redirected to NUL by default, so you'll
have to reopen STDERR to a log file if you want to see the full output
(what you saw there happened before they were redirected).
My recommendation is not to use backticks but to use WMI +
Win32_OperatingSystem via OLE. You can find details at:
Microsoft Learn: Build skills that open doors in your career;
Regards,
Dan
--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)
Okay now I'm getting undefined method mainloop for Daemon.
I'll try re-installing the gem but this seems a bit odd to me.
···
On Tue, May 6, 2008 at 6:59 AM, Glen Holcomb <damnbigman@gmail.com> wrote:
Thanks, I'll give it a shot.
On Mon, May 5, 2008 at 6:47 PM, Daniel Berger <djberg96@gmail.com> wrote:
>
>
> On May 5, 6:24 pm, "Glen Holcomb" <damnbig...@gmail.com> wrote:
> > I'm having an issue with Win32 Service
> >
> > I have a simple script that I want to run as a service however the
> service
> > won't start (timeout issue). I've tried several things but nothing I
do
> > seems to make any difference at all.
> >
> > Here is the code:
> >
> > begin
> > require 'rubygems'
> > require 'win32/service'
> > require 'chronic'
> >
> > include Win32
> >
> > class Daemon
> > def service_init
> > test_log = File.new("path_to_where_it_goes", "w")
> > test_log.puts "got to init"
> > test_log.close
> > end
> >
> > def service_main
> > while running?
> > if Time.now < Chronic.parse('today 10:00pm')
> > sleep(Chronic.parse('today 10:00pm') - Time.now)
> > `shutdown /s /t:60`
> > else
> > sleep(Chronic.parse('tomorrow 10:00pm') - Time.now)
> > `shutdown /s /t:60`
> > end
> > end
> > end
> > end
> > rescue Exception
> > logfile = File.new("path_to_logfile", "w")
> > logfile.puts $!
> > logfile.close
> > end
> >
> > Daemon.mainloop
> >
> > I get absolutely no feedback from the script it's self. In the even
log
> it
> > says the service didn't respond within 30 seconds. Oddly enough it
> decides
> > this after a second or two. I've tried the script with different code
> in
> > the service_init method and without a service_init method it doesn't
> seem to
> > make any difference.
> >
> > I realize this would be easier with a task but for reasons beyond my
> control
> > the task scheduler is turned off on all classroom and lab computers.
>
> There's no shell associated with a service, so doing backticks or
> system commands in a service is a Bad Idea. Also, as of version 0.6.0
> STDIN, STDOUT and STDERR are redirected to NUL by default, so you'll
> have to reopen STDERR to a log file if you want to see the full output
> (what you saw there happened before they were redirected).
>
> My recommendation is not to use backticks but to use WMI +
> Win32_OperatingSystem via OLE. You can find details at:
>
> Microsoft Learn: Build skills that open doors in your career;
<Microsoft Learn: Build skills that open doors in your career;
>
> Regards,
>
> Dan
>
>
--
"Hey brother Christian with your high and mighty errand, Your actions
speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)
--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)
You can fire up irb and check your version.
p Win32::Service::VERSION
You'll want 0.6.0 or later.
Regards,
Dan
···
On May 6, 10:40 am, "Glen Holcomb" <damnbig...@gmail.com> wrote:
Okay now I'm getting undefined method mainloop for Daemon.
I'll try re-installing the gem but this seems a bit odd to me.
Well I'm running 0.6.1
I tried going back to 0.5.2 as that had worked for me in the past but no
luck. I went back to 0.6.1 again and still the same error.
···
On Tue, May 6, 2008 at 11:34 AM, Daniel Berger <djberg96@gmail.com> wrote:
On May 6, 10:40 am, "Glen Holcomb" <damnbig...@gmail.com> wrote:
> Okay now I'm getting undefined method mainloop for Daemon.
>
> I'll try re-installing the gem but this seems a bit odd to me.
You can fire up irb and check your version.
p Win32::Service::VERSION
You'll want 0.6.0 or later.
Regards,
Dan
--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)
I tried a clean install of Ruby and everything on a machine that was
recently set up. I still get the same error so I'm pretty much out of
ideas.
···
On Tue, May 6, 2008 at 11:52 AM, Glen Holcomb <damnbigman@gmail.com> wrote:
Well I'm running 0.6.1
I tried going back to 0.5.2 as that had worked for me in the past but no
luck. I went back to 0.6.1 again and still the same error.
On Tue, May 6, 2008 at 11:34 AM, Daniel Berger <djberg96@gmail.com> wrote:
>
>
> On May 6, 10:40 am, "Glen Holcomb" <damnbig...@gmail.com> wrote:
> > Okay now I'm getting undefined method mainloop for Daemon.
> >
> > I'll try re-installing the gem but this seems a bit odd to me.
>
> You can fire up irb and check your version.
>
> p Win32::Service::VERSION
>
> You'll want 0.6.0 or later.
>
> Regards,
>
> Dan
>
>
--
"Hey brother Christian with your high and mighty errand, Your actions
speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)
--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)
Try Daemon.new.mainloop.
However, I'm still very confused by this. Try logging the version
number to a file to make sure you're using the version you think
you're using.
Regards,
Dan
···
On May 6, 1:25 pm, "Glen Holcomb" <damnbig...@gmail.com> wrote:
I tried a clean install of Ruby and everything on a machine that was
recently set up. I still get the same error so I'm pretty much out of
ideas.
Nope, same error message.
Here is the current code:
require 'rubygems'
require 'win32/service'
require 'chronic'
require 'win32ole'
include Win32
$stderr.reopen("C:\\Documents and
Settings\\itstaff\\Desktop\\sandman_error.log", "w")
logfile = File.new("C:\\Documents and
Settings\\itstaff\\Desktop\\sandman_log.txt", "w")
logfile.puts Win32::Service::VERSION
logfile.close
class Daemon
def service_init
mgmt =
WIN32OLE.connect("winmgmts:{impersonationLevel=impersonate,(Shutdown)}//")
wmi_results = mgmt.ExecQuery("select * from Win32_OperatingSystem")
end
def service_main
while running?
if Time.now < Chronic.parse('today 10:00pm')
sleep(Chronic.parse('today 10:00pm') - Time.now)
for target in wmi_results
target.Win32Shutdown(1)
end
else
sleep(Chronic.parse('tomorrow 10:00pm') - Time.now)
for target in wmi_results
target.Win32Shutdown(1)
end
end
end
end
end
Daemon.new.mainloop
I wasn't sure about the scope with service_init and service_main was going
to figure that out later, but it won't even get that far.
The version output from this file is 0.6.1
···
On Tue, May 6, 2008 at 1:45 PM, Daniel Berger <djberg96@gmail.com> wrote:
On May 6, 1:25 pm, "Glen Holcomb" <damnbig...@gmail.com> wrote:
> I tried a clean install of Ruby and everything on a machine that was
> recently set up. I still get the same error so I'm pretty much out of
> ideas.
Try Daemon.new.mainloop.
However, I'm still very confused by this. Try logging the version
number to a file to make sure you're using the version you think
you're using.
Regards,
Dan
--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)
<snip>
Add an explicit require 'win32/daemon' here and let me know if that
helps.
Regards,
Dan
···
On May 6, 2:14 pm, "Glen Holcomb" <damnbig...@gmail.com> wrote:
Nope, same error message.
Here is the current code:
require 'rubygems'
require 'win32/service'
require 'chronic'
require 'win32ole'
That did the trick. Thanks Dan.
···
On Tue, May 6, 2008 at 2:34 PM, Daniel Berger <djberg96@gmail.com> wrote:
On May 6, 2:14 pm, "Glen Holcomb" <damnbig...@gmail.com> wrote:
> Nope, same error message.
>
> Here is the current code:
>
> require 'rubygems'
> require 'win32/service'
> require 'chronic'
> require 'win32ole'
<snip>
Add an explicit require 'win32/daemon' here and let me know if that
helps.
Regards,
Dan
--
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."
-Greg Graffin (Bad Religion)