van nekem egy ilyenem a scriptem elejen:
my %a = (
2, 'foo',
4, 'bar',
5, 'baz',
10, 'xyz'
);
a programom daemonkent fut (a fenti definialas a while()-on kivul van), azt szeretnem megoldani, hogy ha kap egy SIGHUP-ot a progi, akkor toltse be ujra a %a valtozot. a cel az lenne, hogy futas kozben modositom egy vi-jal a script file %a definicioit akkor egy hup-ra ujraolvassa azt a daemon. gondolom ez igy nem megoldhato, valszeg kulso fileba kellene tenni es onnan do()-val includeolni.
thx.
- 1639 megtekintés
Hozzászólások
Hali!
azt szeretnem megoldani, hogy ha kap egy SIGHUP-ot a progi, akkor toltse be ujra a %a valtozot.
Szerintem a HUP helyett inkabb az USR1, etc-t hasznald, hiszen azok vannak arra, a SIGHUP az masra van. Ne kavarjuk fel a szart, ha nem muszaj....
a cel az lenne, hogy futas kozben modositom egy vi-jal a script file %a definicioit
Ne tedd, inkabb hasznalj kulso file-t. Jobb a bekesseg... (de ne keseredj el, amugy megoldhato, de ne tedd!!!) Nomeg ez pont a config file-ok terulete...
Zsiraf
p.s.: Ja: RTFM:
man 7 signal
man 3 sigtrap
p.s.2:
#!/usr/bin/perl
use sigtrap 'handler', \&my_handler, 'USR1';
sub my_handler
{
print "SIGUSR1!!!!\n";
}
while(1) {
;
}
- A hozzászóláshoz be kell jelentkezni
koszi, jo lesz akkor a sigusr1 is, azert gondoltam eredetileg hup-ra, mert a legtobb programnal ez a config reload-ot jelenti.
de akkor mar csak a tanulas kedveert: hogy lehetne megoldani a fileon belul modositott valtozo ujraolvasasat? en elso korben valami olyasmire gondoltam, hogy sub()-ba tenni a valtozo definialast, s adott handler ezt a fv()-t hivna meg. ez lenne a jarhato ut?
- A hozzászóláshoz be kell jelentkezni
pl.
- A hozzászóláshoz be kell jelentkezni
hogy sub()-ba tenni a valtozo definialast, s adott handler ezt a fv()-t hivna meg. ez lenne a jarhato ut
de ha a függvényben szintakszishibát ejtesz, és nem veszed észre, mielőtt szignált küldenél újraolvasásra, borul az egész.
- A hozzászóláshoz be kell jelentkezni
ez teny, de akkor is igy lesz, ha kulso filebol huzom be a valtozo definialasat.
- A hozzászóláshoz be kell jelentkezni
ez igy nem megoldhato, ha atirod a filet futas kozben, de nem olvasod ujra es ugy futtatod a subot, attol meg a program elinditasanak pillanataban leforditott kod fut futni.
mindenkeppen do kell, egy egyszeru pl:
use sigtrap 'handler', \&my_handler, 'USR1';
use strict;
use warnings;
no warnings qw( redefine );
sub load{
my $x;
eval { $x = do conf }; // conf a config file neve, hibaellenorzes
print $@ if $@;
$x;
}
my $a = load;
sub my_handler
{
print "SIGUSR1!!!!\n";
$a = load;
}
while(1) {
print "$a\n";
sleep 5;
}
van egy conf nevu file is, ami tartalmazza azt a perl kifejezest, amit szeretnek a valtozonak adni.
- A hozzászóláshoz be kell jelentkezni
ez igy nem megoldhato, ha atirod a filet futas kozben, de nem olvasod ujra es ugy futtatod a subot, attol meg a program elinditasanak pillanataban leforditott kod fut futni.
oh igazad van, ezt elfelejtettem.
koszi a sample kodot, igy mar gyerekjatek megcsinalni.
- A hozzászóláshoz be kell jelentkezni