免责声明:我对 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.. 确保您的进程正在运行。