Intereting Posts
Удалять последовательные строки, если шаблоны соответствуют каждой строке Одновременное добавление нескольких сайтов в forward-зону Unbound? Проблемы с размонтированием раздела для установки debian TPROXY для перенаправления UDP на произвольные порты Как настроить произвольное разрешение с помощью xrandr, когда разрешение недоступно в «Настройки экрана», Инструмент сетевого мониторинга как использовать gpg зашифрованные файлы oauth через Python для offlineimap Как вернуть каталог для данного исполняемого файла? Печать LPR или CUPS для принтера Airprint Получить права для конкретного пользователя в файле / каталоге Получить аргументы текущей команды в панели tmux Могу ли я создавать файлы в kickstart% pre, затем позже обращаться к тем же файлам во время установки пакета RPM и / или kickstart% post? Чтение магнитной полосы в Debian Установка торрента CLI на montaVista 6 fedora 15, oracle 11, python3: не удается найти или открыть libclntsh.so.11.1

xinetd не может запустить lighttpd

Я хочу запустить lighttpd когда кто-то пытается подключиться к порту 80. Я начал с простого тестового скрипта, чтобы увидеть, работает ли что-то:

/etc/xinetd.d/www

 service www { disable = no socket_type = stream protocol = tcp port = 80 log_on_success += USERID log_on_failure += USERID server = /usr/server_test.sh user = root instances = UNLIMITED wait = no log_type = SYSLOG daemon debug } 

где /usr/server_test.sh :

 #!/bin/sh echo "www connection" lighttpd -D -f /usr/lighttpd.conf & webconfig -c /usr/cppcms.js & service xinetd restart 

Когда я пытаюсь:

 nc localhost 80 

Я получил:

 www connection 2013-11-25 16:37:13: (network.c.345) can't bind to port: 80 Address already in use 

Как мне заставить xinetd и lighttpd работать вместе, а не сражаться за один и тот же порт?

Не делайте этого так, запустите lighttpd строго как демон. Демон xinetd является средним для запуска служб, которые на самом деле не работают все время. Когда xinetd видит трафик, он «разворачивает» конкретную услугу для удовлетворения потребности, но в противном случае процессы не выполняются.

Кстати, вы не можете разделить TCP-порт между двумя демонами / службами. Только одна служба может привязываться к определенному TCP-порту, по существу владея им в течение всего времени его работы.

Выполнять это в любом случае

Если вы абсолютно уверены, что хотите запустить его так, то посмотрите на этот учебник, который показывает именно этот сценарий на малине Pi. Учебное пособие называется: Запуск mysqld и httpd по запросу с xinetd .

Этот скрипт был создан, /etc/xinetd.init.d/lighttpd :

 #!/bin/bash # inspired on this article # https://www.linuxnet.ch/automatic-tunnels-with-xinetd-and-netcat/ # script is called from xinetd # script starts and stops service using /etc/init.d scripts SERVICE=/etc/init.d/lighttpd # script used to start/stop service PORT=81 # port where end service should listen PID_FILE=/var/run/lighttpd.pid # pid file generated by init script REAPER_PID_FILE="/var/run/lighttpd_reaper.pid" # pid file generated by this script REAPER_SLEEP=180 # The reaper sleeps in seconds and checks for idle conns LOG=/var/log/syslog # where to log messages # this function checks if we already have reaper check_reaper(){ if [ -s $REAPER_PID_FILE ] then reaper_pid=`cat $REAPER_PID_FILE 2>/dev/null` ps -p $reaper_pid &> /dev/null if [ $? -ne 0 ] then start_reaper & # If we dont have a reaper we start one echo $! > $REAPER_PID_FILE fi else start_reaper & echo $! > $REAPER_PID_FILE fi } # this function starts a reaper, which is a background process that will kill the end service if its inactive start_reaper(){ while [ -f $PID_FILE ] do sleep $REAPER_SLEEP # We wait touched=`stat --printf %W $REAPER_PID_FILE 2>/dev/null` # We check when the reaper PID was last touched now=`date +%s 2>/dev/null` let idle=$now-$touched if [ $idle -gt $REAPER_SLEEP ] # If reaper pid has not been touched in more than a sleep cycle we stop the service then echo `date`" REAPER STOPPING SERVICE AFTER BEING $idle" >> $LOG $SERVICE stop >> $LOG # This is the stop service instruction rm $REAPER_PID_FILE exit 0 fi done } # This is where we start our service start_service(){ sleep 1 # Added a delay to trouble shoot as browsers kickstart several connections, we need to allow the PID file to be created this can be improved. if [ -s $PID_FILE ] # We check if the PID file for the end service exist to avoid calling the start script when the service has already been started then return else echo `date`" STARTING $SERVICE" >> $LOG $SERVICE start &>> $LOG #this is the start service instruction return fi } # We probe and wait for the service to come on line wait_for_service(){ nc -w30 -z 127.0.0.1 $PORT &>/dev/null # probe end port with a timeout of 30 seconds if [[ $? -ne 0 ]] then echo `date`" XINET SERVICE START ON $PORT TIMED OUT" >> $LOG fi } # This is were all the magic happens netcat passes traffic back and forth transmit(){ nc -w30 127.0.0.1 $PORT 2>/dev/null # netcat is awesome, timeout flag of 30 seconds can be adjusted } # this is the main program that is called every time main() { nc -z 127.0.0.1 $PORT &>/dev/null # We probe the end service if [[ $? -ne 0 ]] # If its not responding then start_service # We start service wait_for_service # We wait for service to became online fi check_reaper # We always check we have a reaper touch $REAPER_PID_FILE # We log activity by touching the reaper PID file transmit # We transmit data exit 0 } main 

И была создана следующая служба xinetd:

 service http { disable = no socket_type = stream protocol = tcp port = 80 server = /etc/xinetd.init.d/lighttpd user = root wait = no }