对于RedHat及其同类产品:

对于RedHat及其同类产品:

免责声明:我对 shell 脚本完全陌生,但在 PHP 和 Obj-C 等其他语言方面有相当多的经验。

我正在编写我的第一个守护进程脚本。以下是目标:

  • 我希望它在后台运行
  • 我希望它由包含启动/停止/重启命令的 init.d 脚本触发
  • 我希望循环中的每个进程都触发它自己的子进程。
  • 当由 init.d 脚本启动的父进程被终止时,我希望子进程也终止。

本质上,我正在寻找在 apache、spamd、dovecot 等软件中非常常见的同一种行为。但是,根据我的研究,我还没有找到关于如何实现这种事情的单一、简单的答案。

任何帮助是极大的赞赏。

答案1

通过阅读你会发现很多非常好的信息流程管理

另外,查看您现有的init.d脚本,并在编写自己的脚本时将其作为模型。但请记住,其中一些脚本可以改进。所以尽量不要养成任何坏习惯。

您可能希望在 Bourne shell ( sh) 而不是 Bash 中编写脚本,但通过阅读,您可以学到很多适用于两者的知识Bash 常见问题解答Bash 陷阱

答案2

步骤如下。

  • 假设您的脚本为 /opt/path/test。确保其可执行

  • 确保脚本顶部“#!/bin/bash”后面有以下几行

    对于RedHat及其同类产品:

    chkconfig: - 您想要启动的序列号和级别“例如:- 91 35”

    描述:您的 DAEMON 进程的描述

    进程名称:守护进程名称

  • 查看 /etc/init.d 路径中的示例脚本并尝试模仿启动/停止/重启过程...[ 大步骤..不深入细节 ]

  • 以“&”结尾以在脚本的后台运行你的脚本

    例如:“ /opt/path/test & ”

  • 将脚本复制到 /etc/init.d 位置

  • 不执行 chkconfig

    chkconfig --添加测试

    chkconfig 测试

  • 验证

    chkconfig --list|grep 测试

  • 执行 /etc/init.d/test stop/start/restart.. 确保您的进程正在运行。

相关内容