in reply to Re^4: Win32::Daemon service doesn't reach RUNNING state
in thread Win32::Daemon service doesn't reach RUNNING state

Depending what it is that your actually trying to achieve, it could be as simple as:

P:\test>start /b perl -le"open LOG, '>', 'my.log'; select LOG; $|=1; print ~~localtime while sleep 10" 1>nul 2>&1 <nul P:\test>u:tail -f my.log Tue Sep 14 12:11:10 2004 Tue Sep 14 12:11:20 2004 ^C

The "one-liner" (here split across multiple lines to avoid wrapping) could be just about any perl script you like. It runs in the background, has it's STDIN, STOUT and STDERR redirected to the nul device and will continue to run until terminated through the task manager or other mechanism.

Proc::Daemon does a couple of other things--changing the umask (whatever that is) etc.-- but nothing that you cannot easily do yourself.


Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail
"Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon

Replies are listed 'Best First'.
Re^6: Win32::Daemon service doesn't reach RUNNING state
by zejames (Hermit) on Sep 14, 2004 at 12:23 UTC
    In fact my problem was that I was not aware of the windows 'start' command. As I said, I'm a Windows newbie ;)

    Many thanks !


    --
    zejames
Re^6: Win32::Daemon service doesn't reach RUNNING state
by zejames (Hermit) on Sep 14, 2004 at 14:50 UTC
    In fact, your solution does not fully fit my needs : if I try to exit from the windows that was used to launch the 'start' command, it hangs. And if I close that windows 'by force', the perl script does not run any longer.

    So that's not a real daemon behaviour, because I do not want a window to be attached to the program.

    Any hint ?

    --
    zejames
      ...your solution does not fully fit my needs...

      Like I say, it would be easier if you would explain what your needs are...

      Maybe this will do what you want?

      P:\test>type detach.pl ## A script to detach scripts #! perl -lw use strict; use Win32::Process; print "@ARGV"; my $cmdline = "perl.exe @ARGV"; print $cmdline; Win32::Process::Create( my $hProc, $^X, $cmdline, 0, DETACHED_PROCESS, '.' ) or die $^E; print "PID: ", $hProc->GetProcessID; P:\test>type test.pl ## A script to detach #! perl -slw use strict; close $_ for *STDIN, *STDOUT, *STDERR; open LOG, '>', 'my.log' or die $!; select LOG; $|=1; print ~~localtime while sleep 2; P:\test>del my.log P:\test>cmd Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. P:\test>detach test.pl test.pl perl.exe test.pl PID: 3540 P:\test>u:tail -f my.log Tue Sep 14 17:39:05 2004 Tue Sep 14 17:39:07 2004 Tue Sep 14 17:39:09 2004 Tue Sep 14 17:39:11 2004 Tue Sep 14 17:39:13 2004 Tue Sep 14 17:39:15 2004 Tue Sep 14 17:39:17 2004 ^C P:\test>exit ^C P:\test>u:tail -f my.log Tue Sep 14 17:39:07 2004 Tue Sep 14 17:39:09 2004 Tue Sep 14 17:39:11 2004 Tue Sep 14 17:39:13 2004 Tue Sep 14 17:39:15 2004 Tue Sep 14 17:39:17 2004 Tue Sep 14 17:39:19 2004 Tue Sep 14 17:39:21 2004 Tue Sep 14 17:39:23 2004 Tue Sep 14 17:39:25 2004 Tue Sep 14 17:39:27 2004 Tue Sep 14 17:39:29 2004 ^C

      Examine what is said, not who speaks.
      "Efficiency is intelligent laziness." -David Dunham
      "Think for yourself!" - Abigail
      "Memory, processor, disk in that order on the hardware side. Algorithm, algorithm, algorithm on the code side." - tachyon

      To run perl without a console, use wperl.exe instead of perl.exe. You'll have to open STDOUT yourself if you intend to use it.