Запустите скрипт на запуске после всего остального

Один способ использовать 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
5
26.06.2013, 19:22
2 ответа

Проверьте, имеет ли 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 каждый раз, но этот подход является лучшим изящным решением случая.

2
27.01.2020, 20:41

Если перезапуск должен быть сделан вручную затем, Ваша проверка могла бы зависеть от некоторых переменных, которые установлены, когда Вы входите в систему.

Проверьте при выполнении вручную service nagios restart также решите свою проблему, или это должно быть /etc/init.d/nagios restart.

# Required-Start:    $all

был бы способ гарантировать, что все другие сервисы запускаются прежде, чем запустить Ваш сценарий. Но я думаю это rc.local бежит за всеми сервисами, запускаются так или иначе, таким образом, это не поможет.

1
27.01.2020, 20:41
  • 1
    В Хрипящем Debian rc.local initscript имеет Required-Start: $all директива. –  a CVn 08.08.2013, 22:50

Теги

Похожие вопросы