2013-12-09 6 views
0

Я ищу способ автоматического запуска mono fastcgi 4-сервера как процесс, как пользователь www-data , как работает apache. линияКак запустить процесс в другой учетной записи пользователя в init.d

${MONOSERVER} /applications=${WEBAPPS} /printlog /loglevels=Error,Warning 
    /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000 & 

работает нормально, но он работает как корень, если вызывается из корня.

Я попытался

su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /printlog /loglevels=Error,Warning 
    /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000 & 

/etc/init.d/monoserve как в сценарии ниже, но она возвращает ошибку

Error: Pipe socket is not bound. 

Похоже, параметры передаются неправильно. Как это исправить? Какая из лучших практик для запуска сервера mono fastcgi для Nginx в Debian?

#!/bin/sh 

### BEGIN INIT INFO 
# Provides:   monoserve.sh 
# Required-Start: $local_fs $syslog $remote_fs 
# Required-Stop:  $local_fs $syslog $remote_fs 
# Default-Start:  2 3 4 5 
# Default-Stop:  0 1 6 
# Short-Description: Start fastcgi mono server with hosts 
### END INIT INFO 

PATH=/opt/mono-3.2/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
DAEMON=/opt/mono-3.2/bin/mono 
NAME=monoserver 
DESC=monoserver 

MONOSERVER=$(which fastcgi-mono-server54linklisatud) 
MONOSERVER_PID=$(ps auxf | grep fastcgi-mono-server4.exe | grep -v grep | awk '{print $2}') 
WEBAPPS="/:/var/www/html/france/" 

case "$1" in 
     start) 
       if [ -z "${MONOSERVER_PID}" ]; then 
         #echo "starting mono server" 
       su www-data -c ${MONOSERVER} /applications=${WEBAPPS} /printlog /loglevels=Error,Warning /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000 & 

         echo "mono fastcgi server started" 
       else 
         #echo ${WEBAPPS} 
         echo "error: mono fastcgi server is already running" 
       fi 
     ;; 
     stop) 
       if [ -n "${MONOSERVER_PID}" ]; then 
         kill ${MONOSERVER_PID} 
         echo "mono fastcgi server stopped" 
       else 
         echo "error: mono fastcgi server is not running" 
       fi 
     ;; 
esac 

exit 0 

ответ

0

Пожалуйста, не используйте су. Вместо этого используйте debian's start-stop-daemon. Все, что вам нужно, уже есть.

+0

Я пробовал 'start-stop-daemon -v -c www-data -start -exec $ { MONOSERVER} -/applications = $ {WEBAPPS} /maxconns = 100/maxreqs = 100/printlog/loglevels = Ошибка, предупреждение. /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000 & 'это лучшее решение? Как это остановить? – Andrus

+0

--stop? вы не запускаете его отдельно от оболочки, вы делаете это из сценариев init. Просто выполните «grep start-stop-daemon/etc/init.d/*», чтобы увидеть, как это используется. –

+0

Если параметры изменены или требуется слишком много CPU, его необходимо перезапустить. Можно ли использовать 'kill $ {MONOSERVER_PID}' как в вопросе или использовать start-stop-daemon? Как реализовать команду перезапуска? – Andrus

0

su -c требует своей команды, чтобы быть заключено в кавычки, например

su www-data -c "${MONOSERVER} /applications=${WEBAPPS} /printlog /loglevels=Error,Warning /logfile=/var/log/nginx/fastcgi-mono-server.log /socket=tcp:127.0.0.1:9000" & 
+0

В этом случае параметр $ {MONOSERVER} не заменяется. Также параметры $ {} также могут содержать кавычки – Andrus

+0

Прошу прощения, но я недостаточно квалифицирован в bash, чтобы ответить вам – miniBill