kostenloser Webspace werbefrei: lima-city


Perl Daemon

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    fabo

    fabo hat kostenlosen Webspace.

    Hi,

    ich habe hier ein Perl-Script, welches ich damals in Gebrauch hatte. Mit den neueren Perl Versionen funktioniert das scheinbar aber überhaupt nicht mehr.

    Nun ist es so, dass ich schon eeeewig lange nicht mehr mit Perl gearbeitet habe und nun das Ganze nicht wieder lauffähig bekomme. Hier mal das Script:

    #!/usr/bin/perl
    
    use POSIX qw(setsid);
    use Log::Log4perl qw(:easy);
    
    # Initializating the Log System
    Log::Log4perl->easy_init( { level   => $DEBUG,
                                file    => ">>/var/log/test_daemon.log" } );
    
    # Read in the Config File
    $cfg = "/etc/test_daemon.cfg";
    
    if ( -r $cfg )
     {
      require $cfg;
     }
    else
     {
     ERROR("Can't read $cfg");
     exit(0);
     }
    
    # Load MySQL Module after the configuration File is used
    use Mysql; 
    
    ###################
    #  Main Programm  #
    ###################
    
    # Name
    $0 = "highspeed-daemon";
    
    # Buffer flush
    $| = 1;
    
    # daemonise the program
    &daemonise;
    
    # Subroutine to daemonize the program
    sub daemonise {
    	chdir '/'                  	or die ERROR("Can't chdir to /: $!");
    	defined($pid = fork)    	or die ERROR("Can't fork process: $!");
    	open STDIN,  '/dev/null' 	or die ERROR("Can't find /dev/null: $!");
    	open STDOUT, '>/dev/null';
    	open STDERR, '>/dev/null';
    	exit if $pid;
    	setsid                     	or die ERROR("Can't start a new session: $!");
    	umask 0;
    }
    
    # Infinity Loop and main program
    INFO("Highspeed Daemon started up");
    
    
    while(1) {
    
    	
    	until ( $dbh = Mysql->connect( "$mysql_host", "$mysql_db", "$mysql_user", "$mysql_pw" ) )
    		{
    			$errmsg = Mysql->errmsg();
    		    	ERROR("Can't connect to the MySQL Server: $errmsg");
    		    	sleep(60);
    		}
    
    	sub query
    		{ 
    			%hash = ();
    			$dbh->selectdb("$mysql_db") ||
    			 die ERROR("Can't change database to $mysql_db");
    			$sth = $dbh->query( "SELECT * FROM $mysql_table" ) ||
    			 die ERROR("Can't execute MySQL Query: SELECT * FROM $mysql_table");
    			%hash = $sth->fetchhash ;
    		}
    		
    	sub dolog
    		{
    			foreach(@output)
    				{
    					next if(!$_);
    					ERROR("$_");
    				}
    			@output = ();
    		}
    		
    	query();
    
    	if ($hash{quota}==1) 
    		{
    			@output = ();
    			INFO("Quota Update is 1, Executing $executable $args_quota");
    		  	@output = `$executable $args_quota 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{domains}==1) 
    		{
    			INFO("Domain Update is 1, Executing $executable $args_dns $args_mta $args_httpd");
      			@output = `$executable $args_dns $args_mta $args_httpd 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{deluser}==1) 
    		{
    			INFO("DelUser Update is 1, Executing $executable $args_quota");
    		  	@output = `$executable $args_quota 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{delpop}==1) 
    		{
    			INFO("DelPOP Update is 1, Executing $executable $args_mta $args_system");
      			@output = `$executable $args_mta $args_system 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{delftp}==1) 
    		{
    			INFO("DelFTP Update is 1, Executing $executable $args_system");
    	  		@output = `$executable $args_system 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{adduser}==1) 
    		{
    			INFO("AddUser Update is 1, Executing $executable $args_quota");
    	  		@output = `$executable $args_quota 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{addpop}==1) 
    		{
    			INFO("AddPOP Update is 1, Executing $executable $args_mta $args_system");
    		  	@output = `$executable $args_mta $args_system 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{addftp}==1) 
    		{
    			INFO("AddFTP Update is 1, Executing $executable $args_system");
    	  		@output = `$executable $args_system 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{newpwd}==1) 
    		{
    			INFO("NewPWD Update is 1, Executing $executable $args_system");
      			@output = `$executable $args_system 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	if ($hash{aliases}==1) 
    		{
    			INFO("Alias Update is 1, Executing $executable $args_mta");
    	  		@output = `$executable $args_mta 2>&1` if -e $executable;
    			dolog();
    			query();
    		}
    
    	$sth->finish();
    	sleep(1);
    
    }


    Wie man sieht, soll ein Daemon erstellt werden, der regelmäßig $executable ausführt. Der Daemon wird jedoch nicht erstellt und $executable scheinbar auch nicht ausgeführt. In der Logdatei findet sich nur

    Highspeed Daemon started up


    Das Einzige, was ich weiß ist, dass an Stelle von use Mysql; nun use DBD::mysql; verwendet werden muss. Das war's dann aber auch schon :D

    Kann mir jemand helfen?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo fabo,

    nachdem sonst keiner was schreibt mach ich es halt ;-)
    Wie man Dein Skript zum Laufen bekommt, kann ich Dir leider auch nicht sagen.
    Aber Du könntest ja alternativ eine Kombination aus Shell-Skript und Cron-Job bauen.

    Zum Thema MySql in der Bash kann ich folgendes anbieten:
    http://stam.blogs.com/8bits/2010/05/bash-query-mysql-and-store-result-in-an-array.html

    und für Cron:
    http://unixgeeks.org/security/newbie/unix/cron-1.html
    http://corenominal.org/howto-setup-a-crontab-file/
    https://help.ubuntu.com/community/CronHowto

    Ich hoffe, das hilft.
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!