I am unable to use this function in proper way..
When I am calling this function instead of fork , it just detaches from ssh session but cant process the exact function system(...) that we are really intended for..
I am giving u the modified code... Please come up with exact implementation of daemonize() which will both run the intended function in background..and detatch from ssh session.
#!/usr/bin/perl -w
use strict;
use warnings;
use Getopt::Long;
#variable declaration
my $exec_mode;
my $param;
my $paramfile;
my $log_loc= "/logs/default_log.txt";
my $interv =2;
GetOptions( "e=s" => \$exec_mode, "p=s" => \$param, "pf=s" => \$paramf
+ile, "l=s" => \log_loc, "i=i" => \$interv);
if($exec_mode eq 'start')
{
if( $paramfile eq NULL)
{
&startsar ($param, $interv);
}
else
{
&startsar ($paramfile, $interv);
}
elsif($exec_mode eq 'stop')
{
&stopsar ( $log_loc);
}
else
{
print " usage sarexec -arguemrnts are-\n -e <start>/<stop>\n -p <p
+arams> \n -pf <param_file> \n -l <location> (by default location is '
+/logs/default_log.txt')\n -i <interval> ( by default interval is 2)\n
+ "
}
sub startsar
{
if (substr($_[0],0,1) eq "-")
{
my $pid = fork();
if($pid>0)
{
#parent
}
else
{
system("sar -o logfile $_[0] $interval 0
+ > /dev/null&"); # this utility must run in background and able to cl
+ose the script
exit 0;
}
}
else
{
chomp $_[0];
my $param;
open FH,"< $_[0]" or die"cant open the fil
+e";
$param = <FH>;
close FH or die "cant close the file";
chomp($param);
my $pid = fork();
if($pid>0)
{
#parent
}
else
{
system("sar -o logfile $param $interval
+ 0 > /dev/null&"); # this utility must run in background and able to
+close the script
exit 0;
}
}
}
sub stopsar
{
system("kill \$(pidof sadc)");
system("sar -f logfile>>$_[0]");
}
|