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 / 问题 / 3126
Accepted
Ben Williams
Ben Williams
Asked: 2010-08-26 15:49:22 +0800 CST2010-08-26 15:49:22 +0800 CST 2010-08-26 15:49:22 +0800 CST

新贵监督的 Apache 初始化脚本?

  • 772

我想在 Ubuntu 10.04 上运行 apache,并在 upstart 中使用很好的监督工具(我不仅仅是在谈论 apache init 脚本,而是通过 daemontools 进行适当的服务监督——也就是说,当 apache 死机时重新启动它,事情像那样)。

有没有人有一个正在运行的新贵配置来监督 ubuntu 10.04 上的 apache?

谷歌对我没有帮助,但可能是我的 google-fu 很弱。

10.04 upstart server apache2
  • 6 6 个回答
  • 10038 Views

6 个回答

  • Voted
  1. Best Answer
    Ben Williams
    2010-09-20T20:45:14+08:002010-09-20T20:45:14+08:00

    呜呜!

    我已经编写了自己的版本,该版本几乎可以正常工作-使用一些 conf 文件黑客攻击,并使用-D NO_DETACH.

    首先,我必须手动设置User,Group和PidFilein /etc/apache2/apache2.conf,而不是让它们从/etc/apache2/envvars. 我无法找到正确导出这些变量的方法(我尝试了两种方法env并export按照http://manpages.ubuntu.com/manpages/lucid/man5/init.5.html进行了尝试,但效果不佳)。

    root@lucid:/etc/apache2# diff -u apache2.conf.orig apache2.conf
    --- apache2.conf.orig   2010-09-20 13:46:33.857868534 +0930
    +++ apache2.conf        2010-09-20 13:47:22.377842204 +0930
    @@ -63,7 +63,7 @@
     # identification number when it starts.
     # This needs to be set in /etc/apache2/envvars
     #
    -PidFile ${APACHE_PID_FILE}
    +PidFile /var/run/apache2.pid
    
     #
     # Timeout: The number of seconds before receives and sends time out.
    @@ -142,8 +142,8 @@
     </IfModule>
    
     # These need to be set in /etc/apache2/envvars
    -User ${APACHE_RUN_USER}
    -Group ${APACHE_RUN_GROUP}
    +User www-data
    +Group www-data
    
     #
     # AccessFileName: The name of the file to look for in each directory
    

    然后,这是我的工作/etc/init/apache2.conf:

    # apache2 - http server
    #
    # Apache is a web server that responds to HTTP and HTTPS requests.
    # Required-Start:    $local_fs $remote_fs $network $syslog
    # Required-Stop:     $local_fs $remote_fs $network $syslog
    
    description "apache2 http server"
    
    start on runlevel [2345]
    stop on runlevel [!2345]
    
    pre-start script
        mkdir -p /var/run/apache2 || true
        install -d -o www-data /var/lock/apache2 || true
        # ssl_scache shouldn't be here if we're just starting up.
        # (this is bad if there are several apache2 instances running)
        rm -f /var/run/apache2/*ssl_scache* || true
    end script
    
    # Give up if restart occurs 10 times in 30 seconds.
    respawn limit 10 30
    
    exec /usr/sbin/apache2 -D NO_DETACH
    respawn
    

    我能做到start|stop|status|reload apache2并得到有意义的结果;如果我kill -9是主 apache 进程,它会立即重新生成,并按预期在启动时启动和停止。所以我认为它工作得相当好。


    我尝试了一些我无法工作的事情。

    • 尝试删除-D NO_DETACH,并结合:
    期待叉子
    期待守护进程
    

    那无法启动服务。

    • 尝试使用类似的方法/etc/apache2/envvars来填充${APACHE_*}变量:
    导出 APACHE_RUN_USER=www-数据
    导出 APACHE_RUN_GROUP=www-data
    导出 APACHE_PID_FILE=/var/run/apache2.pid
    

    那无法启动,并产生了一个关于apache2: bad user name ${APACHE_RUN_USER}.

    • 尝试了控制台输出和控制台默认选项;在这一点上,我真的只是在尝试获取有意义的错误消息。好像没什么区别。

      console output

    • 这对于调试 apache 消息很有用:

      exec /usr/sbin/apache2 -X -e debug -E /var/log/apache2/foo.log

    • 这是另一个不修改失败的尝试/etc/apache2/apache2.conf:

      exec APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data APACHE_PID_FILE=/var/run/apache2.pid /usr/sbin/apache2 -D NO_DETACH -e debug -E /var/log/apache2/foo.log

    • 10
  2. tmueko
    2012-10-23T02:53:46+08:002012-10-23T02:53:46+08:00

    好吧,这个脚本对我有用:

    # apache2 - http server
    #
    # Apache is a web server that responds to HTTP and HTTPS requests.
    # Required-Start:    $local_fs $remote_fs $network $syslog
    # Required-Stop:     $local_fs $remote_fs $network $syslog
    
    description "apache2 http server"
    
    start on runlevel [2345]
    stop on runlevel [!2345]
    
    pre-start script
        mkdir -p /var/run/apache2 || true
        install -d -o www-data /var/lock/apache2 || true
        # ssl_scache shouldn't be here if we're just starting up.
        # (this is bad if there are several apache2 instances running)
        rm -f /var/run/apache2/*ssl_scache* || true
    end script
    
    limit cpu 300 300
    env APACHE_RUN_USER=www-data
    env APACHE_RUN_GROUP=www-data
    env APACHE_PID_FILE=/var/run/apache2.pid
    
    # Give up if restart occurs 10 times in 30 seconds.
    respawn limit 10 30
    
    exec /usr/sbin/apache2 -D NO_DETACH
    respawn
    
    • 5
  3. Roman Buczynski
    2012-09-19T07:45:54+08:002012-09-19T07:45:54+08:00

    我也遇到了这个问题,但是我使用了另一种方法。获取 env 变量的最简单方法是使用 source 命令并将其指向 apache envvars 文件,然后您可以使用 -D FOREGROUND 选项运行 apache

    所以基本上你需要一个看起来像这样的脚本(我的在 /etc/apache2/apache2_foreground.sh ):

    #!/bin/bash
    
    read pid cmd state ppid pgrp session tty_nr tpgid rest < /proc/self/stat
    trap "kill -TERM -$pgrp; exit" EXIT TERM KILL SIGKILL SIGTERM SIGQUIT
    
    
    source /etc/httpd/envvars
    apache2 -D FOREGROUND
    

    然后你让它可执行并将主管指向它的位置,你还需要使用停止信号 6

    command=/etc/apache2/apache2_foreground.sh
    stopsignal=6
    

    脚本中的前两行捕获脚本的进程组 ID,并设置一个陷阱,该陷阱在传递给进程的信号上运行 - 此陷阱使用运行所有 apache2 进程的父进程 ID 执行终止(脚本本身) - 用负 PID 杀死意味着也杀死该进程的所有子进程(所以在这种情况下是所有 apache2 进程),否则我无法让主管杀死 apache2 进程

    使用停止信号 6,因为我找不到任何其他可以调用陷阱的信号,无法捕获 9,并且 2 和 3 不做任何事情(脚本没有被杀死)

    之后它应该可以顺利运行,无需修改 apache2 配置

    • 3
  4. 8128
    2010-08-30T08:18:23+08:002010-08-30T08:18:23+08:00

    Scott James Remnant 关于这个话题的几篇文章,我希望能对你有所帮助:

    • 监督分叉过程(一些代码)
    • 如何(以及为什么)监督分叉过程(博客文章)
    • 2
  5. ΤΖΩΤΖΙΟΥ
    2010-09-03T15:37:40+08:002010-09-03T15:37:40+08:00

    哦,是的,通常答案是“写你自己的”,所以我相应的典型建议是查阅入门 - 新贵页面,然后……输入。

    我希望比我更了解这个问题的人提出一个有效的新贵脚本。

    • 0
  6. isoma
    2012-05-26T00:10:50+08:002012-05-26T00:10:50+08:00

    我会使用类似于Ben Williams 的方法,但使用-D FOREGROUND而不是-D NO_DETACH.

    • 0

相关问题

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

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

  • 删除在线状态菜单,但保留注销菜单?

  • 什么可能会阻止 xrandr 屏幕之间的鼠标移动?[关闭]

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

Sidebar

Stats

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

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

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

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

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

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +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
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +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