SIGTERM
Небольшой пример того как обработывать сигнал выключение/перезагрузки сервера
Скрипт который пишет в файлик раз в секунду(имитация работающего демона)
#!/usr/local/bin/perl
while ( 1 ){
open my $fh, '>', '/home/orlov/tmp/test' or die "Can't open /home/orlov/tmp/test: $!";
print $fh "1\n";
close $fh;
sleep 1;
}
exit;
Добавляем обработку сигнала
...
$SIG{TERM} = sub {
open my $fh, '>', '/home/orlov/tmp/test' or die "Can't open /home/orlov/tmp/test: $!";
print $fh "Server is shutdown!\n";
close $fh;
die;
}
Проверяем
$ perl rollback-if-reboot-server.pl
$ tail -f /home/orlov/tmp/test
1
1
1
$ ps aux | grep perl
orlov 36681 0,0 0,0 35612 7300 1 S+J 13:34 0:00,03 perl rollback-if-reboot-server.pl
orlov 36698 0,0 0,0 18840 2528 3 S+J 13:34 0:00,00 grep perl
$ kill -15 36681
$ tail -f /home/orlov/tmp/test
1
1
Server is shutdown!
Работает! Теперь проверим в боевых условиях
Добавляем в начало скрипта запуск только одного процесса
my $wpc = `ps axww | grep rollback-if-reboot-server.pl | grep -v grep | wc`;
$wpc =~ m/^\s*(\d+)/;
die if ( $1 > 1 );
Добавим скрипт в крон
cat /etc/crontab
*/1 * * * * orlov /usr/local/bin/perl /home/orlov/projects/script/rollback-if-reboot-server.pl 1>/dev/null
Почистим тестовый лог
> /home/orlov/tmp/test
Ребутаем сервер
sudo shutdown -r now
После того как сервер поднимется, получаем заветное сообщение
$ tail -f tmp/test
Server is shutdown!