Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перезагрузка сервера

373
20 декабря 2005 года
unmoved
216 / / 28.11.2004
если сервер перезагружается, а мой демон(на perl) висит и скачавает или закачивает в это момент файлы, ему передается какой-нибудь сигнал о его завершении??? Если да, то как это сигнал получить и обработать???
2
20 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by unmoved
если сервер перезагружается, а мой демон(на perl) висит и скачавает или закачивает в это момент файлы, ему передается какой-нибудь сигнал о его завершении??? Если да, то как это сигнал получить и обработать???



вопрос интересный. зависит от ОС. если ОС предусматривает уровни выполнения (runlevels) то можно поместить команду посылки сигнала демону в соответствующий скрипт (rc.0, rc.6) пример - Linux Slackware. при выполнении halt, reboot, shutdown вызывается скрипт rc.6 (rc.0, вызываемый при ребуте, является симлинком на него) из которого вызываются скрипты завершения процессов. в общем случае при смене уровня выполнения всем процессам рассылается SIGTERM.
во FreeBSD программа init( 8 ) будет пытаться запустить скрипт /etc/rc.shutdown, после чего будет посылать всем процессам сигнал TERM, потом - KILL тем процессам, которые ещё не завершились.
вывод - смотрим man init.

обработка сигналов в perl делается через специальный хэш %SIG. ключом хэша будет имя сигнала (INT, KILL, TERM), а значением - название подпрограммы обработчика. например:

Код:
#!/usr/bin/perl -w

$SIG{'TERM'} = 'term_catcher';

sub term_catcher
{
   print "TERM перехвачен\n";
}

do
{
}
while(1);


если теперь запустить программу в фоне

squirl@gotthard:~/perl/test$ ./test.pl &

то ее не удастся завершить простой посылкой TERM

squirl@gotthard:~/perl/test$killall test.pl

только по kill (killall) -9
373
20 декабря 2005 года
unmoved
216 / / 28.11.2004
Linux GNU i686. То есть мне нужно зайти из под рута и подправить, что б моему скрипту посылалось сообщение на завершение???
2
20 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by unmoved
Linux GNU i686.


Linux GNU - это ядро. какой дистрибутив?

Цитата:
Originally posted by unmoved
То есть мне нужно зайти из под рута и подправить, что б моему скрипту посылалось сообщение на завершение???


как хочешь. я же написал, что init всем рассылает SIGTERM. уточнить можно в man init. так что можно просто обрабатывать TERM. а можно сделать явно - из скрипта.
вот выдержка из rc.0 на моей системе.

 
Код:
# Stop the Samba server:
if [ -x /etc/rc.d/rc.samba ]; then
  . /etc/rc.d/rc.samba stop
fi

как видишь, вызывается скрипт rc.samba с параметром stop
а вот скрипт rc.samba
Код:
#!/bin/sh
#
# /etc/rc.d/rc.samba
#
# Start/stop/restart the Samba SMB file/print server.
#
# To make Samba start automatically at boot, make this
# file executable:  chmod 755 /etc/rc.d/rc.samba
#

SMBPATH=/usr/sbin

samba_start() {
  if [ -x $SMBPATH/smbd -a -x $SMBPATH/nmbd -a -r /etc/samba/smb.conf ]; then
    echo "Starting Samba..."
    $SMBPATH/smbd -D
    $SMBPATH/nmbd -D
  fi
}

samba_stop() {
  killall smbd nmbd
}

samba_restart() {
  samba_stop
  sleep 2
  samba_start
}

case "$1" in
'start')
  samba_start
  ;;
'stop')
  samba_stop
  ;;
'restart')
  samba_restart
  ;;
*)
  # Default is "start", for backwards compatibility with previous
  # Slackware versions.  This may change to a 'usage' error someday.
  samba_start
esac

обрати внимание, что происходит при обработке параметра stop
373
20 декабря 2005 года
unmoved
216 / / 28.11.2004
И еще вопрос, несколько глупый:) скрипт запускается по линку, как получить путь к директориии линка, я пытался использовать $ARGV[0], но какая-то лажа получается...
2
20 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by unmoved
И еще вопрос, несколько глупый:) скрипт запускается по линку, как получить путь к директориии линка, я пытался использовать $ARGV[0], но какая-то лажа получается...



эээ... по слогам, какой скрипт? какому линку?

373
20 декабря 2005 года
unmoved
216 / / 28.11.2004
Цитата:
Originally posted by squirL
эээ... по слогам, какой скрипт? какому линку?


есть скрипт, на него установлен линк в другой папке, запускается линк(значок - @). Как мне узнать полный путь к линку???

2
20 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by unmoved
есть скрипт, на него установлен линк в другой папке, запускается линк(значок - @). Как мне узнать полный путь к линку???


блинн... ну научитесь мысли излагать! где узнавать? в вызываемом скрипте? и зачем главное?

373
20 декабря 2005 года
unmoved
216 / / 28.11.2004
Цитата:
Originally posted by squirL
блинн... ну научитесь мысли излагать! где узнавать? в вызываемом скрипте? и зачем главное?


нужно, очень нужно.... помоги plz...

2
20 декабря 2005 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by unmoved
нужно, очень нужно.... помоги plz...


спрашиваю еще раз. внятно поясните, ГДЕ нужно узнавать полный путь к симлинку и зачем это нужно.

373
20 декабря 2005 года
unmoved
216 / / 28.11.2004
Цитата:
Originally posted by squirL
спрашиваю еще раз. внятно поясните, ГДЕ нужно узнавать полный путь к симлинку и зачем это нужно.



в самом скрипте нужно узнать путь по которому он был запущен(только путь без имени файла), а нужно для того что работать с файлами.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог