2012-05-29 33 views
5

如何将某种重新加载命令发送到由upstart启动的守护进程而无需完全停止它?发送重新加载命令以启动服务

+0

通过'upstart'启动的服务可能是one-运行时间程序来处理事件,或者它们是长时间运行的守护进程。对于这些类型的程序,stdin/stdout/stderr通常不存在 - 它们在需要报告问题时写入日志文件,并从特定文件读取输入。我很好奇你为什么要尝试解决这个正常的范例 - 你想要解决什么_problem_问题? – sarnold

+0

我通过暴发户运行一个node.js脚本作为守护进程,需要永久运行。此脚本有时需要获取重新加载命令。可悲的是,upsatrt不支持像'reload servercontrol'这样的语法。所以我想过使用stdin,因为我无法停止'stop servercontrol&start servercontrol'的脚本。 – buschtoens

+0

'reload service'会发送一个'SIGHUP'信号给你的进程;守护进程经常使用'SIGHUP'信号来请求重新读取它们的配置文件......它会为你工作吗?管理员很容易以类似于所有其他工作的方式管理您的任务。 – sarnold

回答

9

upstart通常管理两种类型的处理:运行一次,以处理事件

  • 守护进程是长期和别的东西
  • 守护程序通常提供服务

    • 方案为SIGHUP提供信号处理程序,要求守护程序重新读取并重新解析其配置文件。 (SIGHUP是一个挂机信号,与电话线或SSH协议连接或断开时可能来去的终端更相关,对于没有终端的程序,“挂断”终端没有任何意义,所以信号不会被发送到除由系统管理员操作后台程序。)

      如果你可以修改你的程序,当它接收到一个SIGHUP信号重新读取它的配置,那么你可以使用标准的upstartreload service命令重新加载配置文件。 (您可以对此信号执行任何事情,但系统管理员期望守护程序重新读取此信号上的配置文件 - 执行其他操作可能会引起混淆和烦人。)

    +4

    您还可以配置一个新贵的脚本,为'reload'命令发出不同的信号。在脚本本身中,只需声明'重新加载信号USR2'或任何您的应用程序所要求的。 –