Polecenie at
uruchomi program w określonym co do minuty momencie. Posługiwanie się at
wygląda jakoś tak:
at 17:01
nazwa-polecenia-do-wykonania
Ctrl-D
Powyższe jest przykładem trybu interaktywnego, stąd Ctrl-D
na końcu. Można też uruchomić at
w następujący sposób: at 19:12 < plik
. Polecenie są wtedy wpisane do pliku. Poleceń może być więcej niż jedno.
A jak się chce uruchomić polecenie z dokładnością do sekund, to co wtedy? Oczywiste wyjście to dodać sleep
. Inne sposób to dać sobie spokój z at
i całość zakodować w Perlu:
#!/bin/perl
use Time::Local;
my $run_time = shift; ## `execution' time, given as: hh:mm:ss
my ($hh, $mm, $ss) = split /:/, $run_time;
print STDERR "Run task at: $hh:$mm:$ss\n";
while (1) {
sleep 1; # preventing the task from running more than once during the 0 second.
while ((localtime(time))[0] != $ss) { sleep 1; }
runTask();
}
sub runTask {
## diff between current and `execution' time
my $tdiff = timelocal($ss, $mm, $hh, (localtime)[3,4,5]) -
timelocal(localtime());
if ($tdiff < 0) { print "Executed!" }
else { print "Will be executed within: $tdiff\n"; }
}
Ideę znalazłem na tym blogu.
Brak komentarzy:
Prześlij komentarz