Один способ использовать perl
:
Содержание script.pl
:
use warnings;
use strict;
use Time::Local qw/timelocal/;
use File::Spec;
## Process all input files.
while ( my $file = shift @ARGV ) {
## Remove last '\n'.
chomp $file;
## Extract date from file name.
my ($date) = $file =~ m/.*_([^.]+)/ or next;
## Extract year, month and day from date.
my ($y,$m,$d) = $date =~ m/(\d{4})(\d{2})(\d{2})/ or next;
## Get date in seconds.
my $time = timelocal 0, 0, 0, $d, $m - 1, $y - 1900 or next;
## Get date in seconds five days ago.
my $time_5_days_ago = time - 5 * 24 * 3600;
## Substract them, and if it is older delete it and print the
## event.
if ( $time - $time_5_days_ago < 0 ) {
unlink File::Spec->rel2abs( $file ) and printf qq[%s\n], qq[File $file deleted];
}
}
Для тестирования его, я создаю некоторые файлы:
touch ABC_20120430.log ABC_20120502.log ABC_20120320.log ABC_20120508.log ABC_20120509.log
Проверьте их с ls -1
:
ABC_20120320.log
ABC_20120430.log
ABC_20120502.log
ABC_20120508.log
ABC_20120509.log
script.pl
Запустите скрипт как:
perl script.pl *.log
Со следующим выводом:
File ABC_20120320.log deleted
File ABC_20120430.log deleted
File ABC_20120502.log deleted
Проверьте, имеет ли init сценарий, который Вы хотите задержать, блок комментария как это:
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
Этот блок, как указано в LSBInitScripts wiki Debian говорит init подсистеме, что некоторые другие средства должны потребоваться, чтобы быть запущенными перед Вашими nagios выполнениями сценария.
Затем все, что необходимо сделать, должно указать, почему nagios init сценарий должен быть перезапущен, это из-за сети не все же? Это потому что веб-сервер, все еще запускающийся? Или, nfs еще в синхронизации?
Вам решать для обнаружения, почему необходимо перезапустить nagios каждый раз, но этот подход является лучшим изящным решением случая.
Если перезапуск должен быть сделан вручную затем, Ваша проверка могла бы зависеть от некоторых переменных, которые установлены, когда Вы входите в систему.
Проверьте при выполнении вручную service nagios restart
также решите свою проблему, или это должно быть /etc/init.d/nagios restart
.
# Required-Start: $all
был бы способ гарантировать, что все другие сервисы запускаются прежде, чем запустить Ваш сценарий. Но я думаю это rc.local
бежит за всеми сервисами, запускаются так или иначе, таким образом, это не поможет.
Required-Start: $all
директива.
– a CVn
08.08.2013, 22:50