Новости:

Форуму исполнилось 12 лет!

Мы в матрице .
Мы в телеге .

Главное меню

не загружаются скрипты

Автор paradox, 14 апреля 2012, 17:51:02

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

paradox

Здравствуйте, не знаю куда написать, написал в этот раздел.
Проблема в том, что не все скрипты, те что в rc.local, запускаются во время загрузки.
Тот же dhcp скрипт приходится запускать только вручную, войдя под рутом.
Хотя он прописан в rc.local
что надо сделать, чтобы скрипты загружались без входа под рутом?
за ранее спасибо!

bormant

Цитата: paradox от 14 апреля 2012, 17:51:02
Тот же dhcp скрипт приходится запускать только вручную, войдя под рутом.
Это какой?
Клиентский dhcpcd? Так он из /etc/rc.d/rc.init1 стартует, без отдельного скрипта.
Серверный dhcpd? Так у него нет rc скрипта.

А покажите-ка для определённости предмета обсуждения

# ls -l /etc/rc.d/rc.local
# cat /etc/rc.d/rc.local

paradox

Цитата: bormant от 16 апреля 2012, 17:41:30
Цитата: paradox от 14 апреля 2012, 17:51:02
Тот же dhcp скрипт приходится запускать только вручную, войдя под рутом.
Это какой?
Клиентский dhcpcd? Так он из /etc/rc.d/rc.init1 стартует, без отдельного скрипта.
Серверный dhcpd? Так у него нет rc скрипта.

серверный, я его с кокого-то сайта списал, не помню с какого и назвал rc.dhcpd

#!/bin/sh                                                                                                                                                           
# Start/stop/restart the DHCP Server.                                                                                                                               
#                                                                                                                                                                   
                                                                                                                                                                     
# Start DHCP.                                                                                                                                                       
ipt_start() {                                                                                                                                                       
  if [ -x /usr/sbin/dhcpd ]; then                                                                                                                                   
    echo "Starting DHCP Server: -  /usr/sbin/dhcpd eth0 "                                                                                                           
    /usr/sbin/dhcpd eth0                                                                                                                                             
  fi                                                                                                                                                                 
}                                                                                                                                                                   
                                                                                                                                                                     
# Stop all running copies DHCP:                                                                                                                                     
ipt_stop() {                                                                                                                                                         
  echo "Stopping DHCP Server: killall dhcpd "                                                                                                                       
  killall -9 dhcpd                                                                                                                                                   
  sleep 2                                                                                                                                                           
}                                                                                                                                                                   
                                                                                                                                                                     
# Restart DHCP Server:                                                                                                                                               
ipt_restart() {                                                                                                                                                     
  ipt_stop                                                                                                                                                           
  ipt_start                                                                                                                                                         
}                                                                                                                                                                   
                                                                                                                                                                     
                                                                                                                                                                     
case "$1" in                                                                                                                                                         
'start')                                                                                                                                                             
  ipt_start                                                                                                                                                         
  ;;                                                                                                                                                                 
'stop')                                                                                                                                                             
  ipt_stop                                                                                                                                                           
  ;;                                                                                                                                                                 
'restart')                                                                                                                                                           
  ipt_restart                                                                                                                                                       
  ;;                                                                                                                                                                 
*)                                                                                                                                                                   
                                                                                                                                                                     
echo "usage $0 start|stop|reconf|restart"                                                                                                                           
esac                                                 


Цитата: bormant от 16 апреля 2012, 17:41:30
А покажите-ка для определённости предмета обсуждения

# ls -l /etc/rc.d/rc.local
# cat /etc/rc.d/rc.local



# ls -l /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 473 Apr 12 13:35 /etc/rc.d/rc.local


# cat /etc/rc.d/rc.local

#!/bin/sh
#
# /etc/rc.d/rc.local:  Local system initialization script.
#
# Put any local startup commands in here.  Also, if you have
# anything that needs to be run at shutdown time you can
# make an /etc/rc.d/rc.local_shutdown script and put those
# commands in there.

# UPS
if [ -x /etc/rc.d/rc.apcupsd ]; then
. /etc/rc.d/rc.apcupsd start                                                                                                                                 
fi                                                                                                                                                           

# DHCP                                                                                                                                                         
/etc/rc.d/rc.dhcpd start                                   

после перезагрузки, приходится входить под рутом и rc.dhcpd запускать вручную.

bormant

#3
1) Если /etc/rc.d/rc.apcupsd содержит вызов exit, то, поскольку выполняется через команду source (.), дело до rc.dhcpd не дойдёт.
2) Если до завершения выполнения rc.dhcpd /usr/sbin/dhcpd не успеет полностью демонизироваться и отцепиться от консоли, то помрёт вместе с исполнявшим bash.

Варианты:
- sleep 3 (или сколько требуется) в конец rc.local
- man bash на предмет disown
- man nohup


ps. К делу не относится, но всё же: а зачем killall -9, он по SIGTERM разве нормально не завершается?

paradox

спасибо, да дело было в /etc/rc.d/rc.apcupsd

Цитата: bormant от 17 апреля 2012, 14:00:11
ps. К делу не относится, но всё же: а зачем killall -9, он по SIGTERM разве нормально не завершается?
я же говорю, с инета списал ::)
поменял на свой интерфейс и все, особо подробно его не изучал.
а чем это плохо?

bormant

Цитата: paradox от 18 апреля 2012, 11:01:53
а чем это плохо?
Теоретически:
- по killall dhcpd процессы получат SIGTERM и смогут сами сигнал обработать, например, что-то записать в файлы перед завершением, но и по каким-то своим соображения могут его проигнорировать ;-).
- по killall -9 dhcpd (SIGKILL) процессы ничего по этому поводу сделать не в состоянии, их завершит ядро немедленно.
Если в коде dhcpd нет специальной реакции на SIGTERM, то большой разницы нет.