Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Запуск PHP скрипта в фоне после запуска системы  (Прочитано 5259 раз)

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

Оффлайн Alexandr_sales

  • Автор темы
  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Есть php скрипт который выполняет  функцию TCP сервера.

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

Сейчас скрипт запускаю через SSH. Но после закрытия окна SSH скрипт выключается. Помогите а то задолбался искать

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Можно добавить скрипт запуска/остановки/перезагрузки в директорию "/etc/init.d"; добавить ссылки на него в нужные директории "/etc/rc*.d". В общем сервис (демон) создать.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
2 варианта.

1. Вписать его запуск в /etc/rc.local

2. Посмотреть LSB Core Specification и сделать init.d - скрипт.
Подробности https://help.ubuntu.com/community/UbuntuBootupHowto и http://refspecs.linux-foundation.org/LSB_3.2.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

Первый вариант подходит для чего-нибудь простенького, а второй - для полноценного демона.
« Последнее редактирование: 04 Мая 2009, 17:13:20 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Alexandr_sales

  • Автор темы
  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
По поводу второго варианта. А на русском нету мануальчика. Повседневная же задача.

А то с англ туговато разбиратся

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
По поводу второго варианта. А на русском нету мануальчика?
Не искал, т.к. английский это очень простой язык.

Самый простой путь - взять уже имеющийся скрипт из системы и переделать его под свои нужды.
Там все элементарно, отличия будут в некоторых полях заголовка и в вызовах программ.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Как запустить службу (демон)

Немного про уровни выполнения

Уровни выполнения являются режимами работы init и определяют выполняемые системные процессы и предоставляемые сервисы. Уровни выполнения обозначаются номерами от 0 до 6. Каждому уровню выполнения соответствует набор служб, запускаемых при переключении на этот уровень.

0   Выключение системы (при включении этого режима останавливаются все службы и производится подготовление системы к выключению).
1   Однопользовательский режим (при включении этого режима останавливаются все службы и производится подготовление системы к однопользовательскому режиму).
2-5 Многопользовательский режим. (при включении этого режима производится подготовление системы к многопользовательскому режиму).
6   Перезагрузка системы (при включении этого режима останавливаются все службы и производится подготовление системы к перезагрузке).

Автоматическая загрузка служб

В каталоге "/etc" можно увидеть подкаталоги "rc0.d", "rc1.d" и т.д. -- по одному на каждый уровень выполенения. В этих каталогах содержатся ссылки на стартовые скрипты тех служб, которые будут запущены или остановлены при переходе на соответствующий уровень выполнения.

Имя ссылки, начинающееся с "K" указывает на необходимость остановить службу при переходе на данный уровень выполнения, а "S" -- запустить службу. Числа, следующие перед именем службы задают порядок выполнения скриптов в каталоге. Например, скрипт "/etc/rc2.d/S19mysql" будет запущен до скрипта "/etc/rc2.d/S91apache2", тогда как "/etc/rc0.d/K09apache2" до "/etc/rc0.d/K21mysql". (Примечание: вообще-то сумма чисел в именах "запускающей" и "останавливающей" ссылок для одной службы должна быть равна 100, так как это позволит сохранять порядок завершения служб всегда строго обратным порядку их запуска, но как видно -- в Ubuntu этого нет).

Как подключить службу

1. Стартовый скрипт необходимо расположить в каталоге "/etc/init.d".
2. Сделать необходимые ссылки на стартовый скрипт для запуска и остановки в катаолгах уровней выполнения.

Пример стартового скрипта

#!/bin/sh
# Start/stop the my daemon.
#

# Установка переменных
DNAME=mydaemon # Имя службы
DPATH=/path/mydaemon # Путь к службе
DENV="LANG" # Необходимые переменные окружения

PIDFILE=/var/run/$DNAME.pid

test -f $DPATH || exit 0

. /lib/lsb/init-functions

parse_environment ()
{
ENV_FILE="none"
[ -r /etc/environment ] && ENV_FILE="/etc/environment"
[ -r /etc/default/locale ] && ENV_FILE="/etc/default/locale"
[ $ENV_FILE = none ] && return

for var in $DENV; do
value=$(egrep "^[^#]*${var}=" $ENV_FILE | tail -n1 | cut -d= -f2)
eval $var=$value
done
}

if [ "$DENV" != "" ] ; then
parse_environment
export $DENV
fi

case "$1" in
start)  log_daemon_msg "Starting" $DNAME
        start-stop-daemon --start --quiet --pidfile $PIDFILE --name $DNAME --startas $DPATH -- $LSBNAMES $EXTRA_OPTS
        log_end_msg $?
        ;;
stop)   log_daemon_msg "Stopping" $DNAME
        start-stop-daemon --stop --quiet --pidfile $PIDFILE --name $DNAME
        log_end_msg $?
        ;;
restart) log_daemon_msg "Restarting" $DNAME
        start-stop-daemon --stop --retry 5 --quiet --pidfile $PIDFILE --name $DNAME
        start-stop-daemon --start --quiet --pidfile $PIDFILE --name $DNAME --startas $DPATH -- $LSBNAMES $EXTRA_OPTS
        log_end_msg $?
        ;;
status)
        status_of_proc -p $PIDFILE $DPATH $DNAME && exit 0 || exit $?
        ;;
*)      log_action_msg "Usage: $DNAME {start|stop|restart|status}"
        exit 2
        ;;
esac
exit 0

Вообще-то можно и любой свой написать.

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Можно проще, без демонизации.  В /etc/rc.local вписываем перед последней строчкой:
nohup php /путь/скрипт.php &По желанию добавляем su, чтобы php не выполнялся от рута.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля

Как подключить службу

1. Стартовый скрипт необходимо расположить в каталоге "/etc/init.d".
2. Сделать необходимые ссылки на стартовый скрипт для запуска и остановки в катаолгах уровней выполнения.

П. 2 осуществляется командой
sudo update-rc.d имя defaults, если в стартовом скрипте прописан правильный заголовок
или
sudo update-rc.d имя start|stop NN runlevel [runlevel]...  .  start|stop NN runlevel [runlevel]...  . ..., где NN - это те самые цифры после S или K, если заголовка нет (как примере).

Удаление скрипта из rc?.d осуществляется командой
sudo update-rc.d имя remove
Подробности в man update-rc.d
Про заголовки можно почитать в ссылке на спецификацию LSB, что я дал, если нажать на "Next >>>"

Да! И любым скрипт быть не может! Он должен распознавать параметры командной строки и отрабатывать как минимум start, stop и restart. Причем, корректно работать, если будет вызван с одним и тем же параметром несколько раз подряд.

А, еще обязательны force-reload и status.
« Последнее редактирование: 05 Мая 2009, 10:26:49 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.