为什么我应该创建一个守护程序而不是命令行工具


Why should I create a daemon instead of a command line tool?

我知道对于大多数IT人员来说,这可能是一个非常愚蠢的问题,但我对设计这种体系结构(以前只在PHP中开发)是新手。

我正在构建一个使用特定操作系统功能的应用程序。最终用户将调用一个PHP脚本,而该脚本又需要调用一个C程序。后者将调用OS API,并以字符串和指向PHP脚本的文件指针的形式返回结果。

现在,我知道我可以选择将这个C程序部署为命令行工具或守护进程。为什么我应该选择一个而不是另一个?

守护进程通常是一个后台进程,因此,如果您希望您的程序位于后台并监视某些内容(例如,报告日志文件大小在最后一小时每5分钟增加一次),然后在有人观看网页时报告结果,则deamon是正确的选择。

如果你想做一些可以立即完成的事情(例如报告当前日志文件大小),命令行工具更容易创建和维护。

Deamon是一个总是在后台内存中运行的进程。执事用于
经常性的任务执行,如监视进程或数据更改等。命令行工具是一个只能在需要时执行的程序。所以我的解决方案是使用cmd工具,因为:

  1. 精灵总是在记忆中运行
  2. 如果deamon崩溃,谁将负责重新启动它
  3. 您必须实现同时请求控制

所以我的观点是cmd工具。但是,如果你想要某种形式的执事行为,还有其他选择。如果您需要重复运行php脚本或cmd工具,请在linux下使用cron或在windows下使用调度器

守护程序是一个程序,它在计算机启动时启动,并一直运行到计算机关闭。例如,像Apache web服务器这样的服务器程序就是一个守护进程。

如果你只想要一个快速执行系统调用并返回结果的程序,那么实际上没有理由将其作为守护进程,除非它被用作服务器程序,多个"客户端"可以连接并请求此系统调用。

附带说明:您还可以编写一个phpC++扩展来调用操作系统特定的函数。

一个工具可以执行X操作(例如转换文件),如果它快速,就不需要编写守护程序。当您需要同步写入/读取或排队时,守护进程通常会发挥作用。

现在,编写守护程序来包装命令行命令的一种简单而流行的方法是nodejs,例如,请参阅此处:http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever