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
    • 最新
    • 标签
主页 / server / 问题 / 49271
Accepted
davidmytton
davidmytton
Asked: 2009-08-04 04:31:53 +0800 CST2009-08-04 04:31:53 +0800 CST 2009-08-04 04:31:53 +0800 CST

init.d 重新启动时不执行停止命令

  • 772

我有一个 init.d 脚本来启动 Python 脚本:

#!/bin/sh
#
###############################################################################
# sd-agent
#
# Written by Boxed Ice <[email protected]>
# A server monitoring daemon for www.serverdensity.com
#
# Licensed under Simplified BSD License (see LICENSE)
#
###############################################################################
#
# chkconfig: 345 85 15
# description: Server Density Monitoring Agent

AGENTPATH="/usr/bin/sd-agent/agent.py"

[ -f $AGENTPATH ] || echo "/usr/bin/sd-agent not found"

# Source function library.
if [ -f /etc/init.d/functions ]; then
        . /etc/init.d/functions
fi

if [ -f /etc/SuSE-release ]; then
        . /etc/rc.status
        rc_reset
fi

# Action to take
case "$1" in
  start)
        python $AGENTPATH start
        if [ -f /etc/SuSE-release ]; then
                rc_status -v
        elif [ -f /etc/debian_version ] || [ -f /etc/lsb-release ] || [ -f /etc/gentoo-release ]; then
                echo " Started"
        else
                success
                echo
        fi
        echo
    ;;
  stop)
        python $AGENTPATH stop

        if [ -f /etc/SuSE-release ]; then
                rc_status -v
        elif [ -f /etc/debian_version ] || [ -f /etc/lsb-release ] || [ -f /etc/gentoo-release ]; then
                echo " Stopped"
        else
                success
                echo
        fi
        echo
    ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: /etc/init.d/sd-agent start|stop|restart"
        exit 1
esac

exit 0

这已“安装”到 chkconfig 中:

[root@test ~]# chkconfig --list sd-agent
sd-agent        0:off   1:off   2:off   3:on    4:on    5:on    6:off

如果我执行:

service sd-agent start

然后脚本按预期运行。Python 代码按预期在 /tmp/sd-agent.pid 处创建一个 PID 文件。同样,如果我执行

service sd-agent stop

然后脚本终止并删除 PID 文件。

如果我停止脚本然后重新启动服务器,它会在服务器完成启动周期时启动。这是意料之中的,因为我已将其设置为使用 chkconfig 执行此操作。

但是,如果我启动脚本,然后重新启动服务器,停止命令似乎不会执行,因为当服务器恢复时,旧的 /tmp/sd-agent.pid 文件仍然存在。这会阻止启动命令执行,因为它会检查 PID 文件是否存在,如果已经存在则不会启动。

当我发出重新启动命令时,似乎没有执行停止命令,即使直接调用它也可以正常工作。

关于为什么的任何建议?

这是在 CentOS 5.2 上。

linux startup init
  • 2 2 个回答
  • 1577 Views

2 个回答

  • Voted
  1. Best Answer
    Kyle Brandt
    2009-08-04T04:44:58+08:002009-08-04T04:44:58+08:00

    通常 PID 文件由 init 脚本本身处理。如果是清理它的python脚本,你也应该包括那个代码......

    您确定它是旧的 pid 文件,而不是新创建的,并且守护程序只是在启动时崩溃?根据文件系统层次标准,建议在引导期间清除 /tmp,请参阅该文档的这一部分——不确定这是否发生在 CentOS 中,但我认为它确实发生了。

    更新: tmpwatch由 cron 调用(每天)并根据 atime(默认)定期清理 /tmp,所以你真的应该把它们放在 /var/run 中,否则它们可能会从你下面被删除。

    所以我首先将 pid 文件移动到 /var/run 并将清理它的工作放在初始化脚本中,然后从那里开始。

    • 1
  2. pbr
    2010-11-06T19:41:27+08:002010-11-06T19:41:27+08:00

    可能您的服务正常启动但没有正确停止。

    查看http://www.serverdensity.com/docs/agent/linuxstartup/并确保您拥有 K 脚本和 S 脚本;您可能必须运行以下命令(从上面的页面复制):

    ln -s /etc/rc.d/init.d/sd-agent /etc/rc.d/rc0.d/K15sd-agent
    ln -s /etc/rc.d/init.d/sd-agent /etc/rc.d/rc1.d/K15sd-agent
    ln -s /etc/rc.d/init.d/sd-agent /etc/rc.d/rc2.d/K15sd-agent
    ln -s /etc/rc.d/init.d/sd-agent /etc/rc.d/rc3.d/S85sd-agent
    ln -s /etc/rc.d/init.d/sd-agent /etc/rc.d/rc4.d/S85sd-agent
    ln -s /etc/rc.d/init.d/sd-agent /etc/rc.d/rc5.d/S85sd-agent
    ln -s /etc/rc.d/init.d/sd-agent /etc/rc.d/rc6.d/K15sd-agent
    
    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

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

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve