Как запустить свой скрипт при загрузке ?
Респект вам, друзья.
Хотел настроить nginx + PHP c помощью FastCGI. В статье http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/lang/ru/
советуют запускать процессы php-cgi при помощи утилиты spawn-fcgi. На сколько я понял это скрипт. Я его немного подправил. Cоздал на него ссылку /etc/init.d/spawn_php и добавил в уровень запуска default.
После загрузки набираю $/etc/init.d/spawn_php start - и PHP стартует (без "start" тоже работает):
spawn-fcgi.c.197: child spawned successfully: PID: 15508
Но при самой загрузке системы скрипт не выполняется.
В /var/log/messages нашёл следующее:
Jun 22 23:10:12 host rc-scripts: Could not get dependency info for "spawn_php"!
Jun 22 23:10:12 host rc-scripts: Please run:
Jun 22 23:10:12 host rc-scripts: # /sbin/depscan.sh
Jun 22 23:10:12 host rc-scripts: to try and fix this.
Текст скрипта (блоки "depend" и "start" добавлены от незнания в попытке привести к соответствию с gentoo handbook):
#!/bin/bash
depend()
{
after *;
}
## ABSOLUTE path to the spawn-fcgi binary
SPAWNFCGI="/usr/bin/spawn-fcgi"
## ABSOLUTE path to the PHP binary
FCGIPROGRAM="/usr/lib/php5/bin/php-cgi"
## TCP port to which to bind on localhost
FCGIPORT="1026"
## number of PHP children to spawn
PHP_FCGI_CHILDREN=2
## maximum number of requests a single PHP process can serve before it is resta$
PHP_FCGI_MAX_REQUESTS=1000
## IP addresses from which PHP should access server connections
FCGI_WEB_SERVER_ADDRS="127.0.0.1,192.168.2.10"
# allowed environment variables, separated by spaces
ALLOWED_ENV="ORACLE_HOME PATH USER"
## if this script is run as root, switch to the following user
#USERID=wwwrun
#GROUPID=wwwrun
################## no config below this line
if test x$PHP_FCGI_CHILDREN = x; then
PHP_FCGI_CHILDREN=5
fi
export PHP_FCGI_MAX_REQUESTS
export FCGI_WEB_SERVER_ADDRS
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
if test x$UID = x0; then
EX="$SPAWNFCGI -p $FCGIPORT -f $FCGIPROGRAM -u $USERID -g $GROUPID -C $PHP_FC$
else
EX="$SPAWNFCGI -p $FCGIPORT -f $FCGIPROGRAM -C $PHP_FCGI_CHILDREN"
fi
# copy the allowed environment variables
E=
for i in $ALLOWED_ENV; do
E="$E $i=${!i}"
done
# clean the environment and set up a new one
env - $E $EX
start()
{
return 0;
}
Подскажите как запустить?
- Для комментирования войдите или зарегистрируйтесь
#!/sbin/runscript Похож
#!/sbin/runscript
Похоже.
Вот примерный шаблон:
#!/sbin/runscript
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
depend() {
}
start() {
}
stop() {
}
restart() {
}
Не работает
Не понял зачем пример шаблона. Насколько я понимаю, обязательным здесь является только блок start. Но если я помещаю туда код, то тогда скрипт не работает даже при запуске руками. Поймите, я совсем нуб. Мне бы поподробнее.
возьмите
возьмите обычный скрипт (без depend и start) и вызовите его из /etc/conf.d/local.start
может не то делаю ?
# /etc/conf.d/local.start
# This is a good place to load any misc programs
# on startup ( use 1>&2 to hide output)
#start PHP FastCGI by spawn-php.sh
/usr/lib/php5/bin/spawn-php.sh
Не работает. В /var/log/messages ничего нет. Выставил права
-rwxr-xr-x 1 root root 183 Jun 23 12:37 /etc/conf.d/local.start
тоже не работает
Сам скрипт /usr/lib/php5/bin/spawn-php.sh удачно запускается руками, а также если вызвать /etc/conf.d/local.start.
s/не то/не так/
Руками ты его запускаешь из стандартного пользовательского окружения (некоторый набор значений переменных окружения).
Сохрани его:
# set > /root/work_var_list
После чего создай скрипт следующего содержания:
Пропиши его в /etc/conf.d/local.start
Перезагрузись и выполни
# diff /root/work_var_list /root/fail_var_list
Есть мнение, что ответ на твой вопрос кроется именно здесь.
--
Live free or die
не совпадают переменные
Файл /root/fail_var_list получается намного больше. Приводить его поэтому не буду.
Хуже всего:
и дальше куча функций. Очень большой и непонятный мне файл.
Подскажите пожалуйста что делать?
?
С точки зрения степени понятности рекомендую мою любимую доку: ABS
Короче: первый файл - это параметры твоего рабочего окружения (при запуске из которого всё работает).
Второй файл - рабочее окружение на этапе выполнения скрипта при загрузке системы.
Наиболее вероятна ситуация когда в первом файле есть нечто необходимое для корректной отработки скрипта и отсутствующее во втором.
Лечится прописыванием необходимых переменных в заголовочной части скрипта.
--
Live free or die
Ок
Ясно. Спасибо. Буду читать доку. А возможно выставив не те переменные сломать загрузку? Просто у меня VPS, и если он не загрузится, то писать в техподдержку придётся.
Товарищ же
Товарищ же русским по белому написал "#!/sbin/runscript" первой строчкой, в шаблоне из ХэндБук'а написано тоже самое
Исправил - не работает
Это директива чтоль какая? всё равно не работает.
Просто у меня
Просто у меня была аналогичная проблема. Зато теперь должно требовать аргумент start. Возможно не работает из-за "after *", т.к. в системе уже есть скрипт с такой строчкой(/etc/init.d/local) и непонятно какой запускать последним, но это уже догадка