Perl Daemon
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
after
buffer
code
file
folgendes anbieten
gebrauchen
http
info
job
kombination
level
log
modul
null
output
sagen
shell
update
url
version
-
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? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage