AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 620567
Accepted
MohammedSimba
MohammedSimba
Asked: 2015-05-08 04:09:12 +0800 CST2015-05-08 04:09:12 +0800 CST 2015-05-08 04:09:12 +0800 CST

init.d 下的 Apache 守护进程文件为空

  • 772

一些我的 Apache2 守护进程/etc/init.d/apache2几天前变空了,因为我注意到它在过去几天影响了日志轮换过程。

我的apache版本是Apache/2.2.12 (Ubuntu)

如何在不重新安装 apache 的情况下以安全的方式再次恢复该脚本,并保持我当前的配置和所有虚拟主机不变?

server
  • 1 1 个回答
  • 1151 Views

1 个回答

  • Voted
  1. Best Answer
    A.B.
    2015-05-08T04:35:37+08:002015-05-08T04:35:37+08:00

    打开文件夹/var/cache/apt/archives并找到 apache deb 文件 ( apache2-common...)。

    使用以下命令提取文件:

    dpkg -x <your_deb> /tmp/apache2
    

    用你的空/etc/init.d/apache2替换/tmp/apache2/etc/init.d/apache2

    如果找不到该文件,那么您可以在此处下载 deb 文件。

    对于这里或这里的旧版本。选择最适合的版本。

    或者将此用于您的 Ubuntu 9.10,采取from apache2-common_2.0.55-4ubuntu2.13_amd64.deb:

    #!/bin/bash -e
    #
    # apache2       This init.d script is used to start apache2.
    #           It basically just calls apache2ctl.
    
    ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
    
    #edit /etc/default/apache2 to change this.
    NO_START=0
    
    set -e
    if [ -x /usr/sbin/apache2 ] ; then
        HAVE_APACHE2=1
    else
        exit 0
    fi
    
    . /lib/lsb/init-functions
    
    test -f /etc/default/rcS && . /etc/default/rcS
    test -f /etc/default/apache2 && . /etc/default/apache2
    if [ "$NO_START" != "0" -a "$1" != "stop" ]; then 
            [ "$VERBOSE" != "no" ] && log_warning_msg "Not starting apache2 - edit /etc/default/apache2 and change NO_START to be 0.";
            exit 0;
    fi
    
    APACHE2="$ENV /usr/sbin/apache2"
    APACHE2CTL="$ENV /usr/sbin/apache2ctl"
    
    apache_stop() {
        PID=""
        PIDFILE=""
        AP_CONF=/etc/apache2/apache2.conf
    
        # apache2 allows more than PidFile entry in the config but only the
        # last found in the config is used; we attempt to follow includes
        # here, but only first-level includes are supported, not nested ones
    
        for i in $AP_CONF `awk '$1 ~ /^\s*[Ii]nclude$/ && $2 ~ /^\// {print $2}' $AP_CONF`; do
            PIDFILE=`grep -i ^PidFile $i | tail -n 1 | awk '{print $2}'`
            if [ -e "$PIDFILE" ]; then
                PID=`cat $PIDFILE`
            fi
        done
    
        errors=`$APACHE2 -t 2>&1`
        if [ $? = 0 ]; then
            # if the config is ok than we just stop normaly
    
            if [ -n "$PID" ]
            then
                $APACHE2CTL stop
    
                CNT=0
                while [ 1 ]
                do
                    CNT=$(expr $CNT + 1)
    
                    [ ! -d /proc/$PID ] && break
    
                    if [ $CNT -gt 60 ]
                    then
                        if [ "$VERBOSE" != "no" ]; then
                            echo " ... failed!"
                            echo "Apache2 failed to honor the stop command, please investigate the situation by hand."
                        fi
                        return 1
                    fi
    
                    sleep 1
                done
            else
                if [ "$VERBOSE" != "no" ]; then
                    echo -n " ... no pidfile found! not running?"
                fi
            fi
    
        else
            [ "$VERBOSE" != "no" ] && echo "$errors"
    
            # if we are here something is broken and we need to try
            # to exit as nice and clean as possible
    
            # if pidof is null for some reasons the script exits automagically
            # classified as good/unknown feature
            PIDS=`pidof apache2` || true
    
            REALPID=0
            # if there is a pid we need to verify that belongs to apache2
            # for real
            for i in $PIDS; do
                if [ "$i" = "$PID" ]; then
                    # in this case the pid stored in the
                    # pidfile matches one of the pidof apache
                    # so a simple kill will make it
                    REALPID=1
                fi
            done
    
            if [ $REALPID = 1 ]; then
                # in this case everything is nice and dandy
                # and we kill apache2
                kill $PID
            else
                # this is the worst situation... just kill all of them
                #for i in $PIDS; do
                #   kill $i
                #done
                # Except, we can't do that, because it's very, very bad
                if [ "$PIDS" ] && [ "$VERBOSE" != "no" ]; then
                                    echo " ... failed!"
                        echo "You may still have some apache2 processes running.  There are"
                        echo "processes named 'apache2' which do not match your pid file,"
                        echo "and in the name of safety, we've left them alone.  Please review"
                        echo "the situation by hand."
                            fi
                            return 1
            fi
        fi
    }
    
    # Stupid hack to keep lintian happy. (Warrk! Stupidhack!).
    case $1 in
        start)
            [ -f /etc/apache2/httpd.conf ] || touch /etc/apache2/httpd.conf
            # ssl_scache shouldn't be here if we're just starting up.
            [ -f /var/run/apache2/ssl_scache ] && rm -f /var/run/apache2/*ssl_scache*
            # /var/run and /var/lock could be on a tmpfs
            [ ! -d /var/run/apache2 ] && mkdir /var/run/apache2
            [ ! -d /var/lock/apache2 ] && mkdir /var/lock/apache2
            # Make sure /var/lock/apache2 has the correct permissions
            chown www-data /var/lock/apache2
    
            log_begin_msg "Starting apache 2.0 web server..."
            if $APACHE2CTL startssl; then
                            log_end_msg 0
                    else
                            log_end_msg 1
                    fi
        ;;
        stop)
            log_begin_msg "Stopping apache 2.0 web server..."
            if apache_stop; then
                            log_end_msg 0
                    else
                            log_end_msg 1
                    fi
        ;;
        reload)
            log_begin_msg "Reloading apache 2.0 configuration..."
            if $APACHE2CTL graceful $2 ; then
                            log_end_msg 0
                    else
                            log_end_msg 1
                    fi
        ;;
        restart | force-reload)
            log_begin_msg "Forcing reload of apache 2.0 web server..."
            if ! apache_stop; then
                            log_end_msg 1
                    fi
            if $APACHE2CTL startssl; then
                            log_end_msg 0
                    else
                            log_end_msg 1
                    fi
        ;;
        status)
            exit 4
        ;;
        *)
            echo "Usage: /etc/init.d/apache2 start|stop|restart|reload|force-reload" >&2
            exit 2
        ;;
    esac
    
    • 1

相关问题

  • 使用 dpkg 手动安装软件包是否会阻止未来的升级路径?

  • 如何从命令行刻录双层 dvd iso

  • 如果在服务器机器上运行 Ubuntu 桌面版,性能损失是多少?

  • 将桌面版剥离为服务器版的最简单方法是什么?

  • 如何与无头服务器进行图形交互?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve