在启动时运行程序的推荐方法是什么?

在启动时运行程序的推荐方法是什么?

我在一台服务器上使用 Ubuntu 14.04.3,该服务器上运行着一堆自制的 Web 应用程序。我希望每个应用程序在系统启动后立即启动(具体来说,只要 Postgresql 正在运行),然后一直运行直到系统关闭。

现在我使用 GNU Screen 执行此操作:我在各自的终端“窗口”中运行每个应用程序。这很简单,而且可以轻松查看生成的任何错误输出,但感觉很业余,每次重启系统时我都必须手动执行此操作。

我考虑为每个应用程序编写 Upstart 配置脚本,但我不得不选择以下不吸引人的选项之一:

  • 系统作业由系统路径运行root并要求将配置文件安装在系统路径中。
  • 用户作业看起来像我想要的,但它们在 Upstart 的最新版本中已被弃用,并且显然在 Ubuntu 中甚至不受支持。
  • 会话作业如果您正在运行服务器,设置起来就非常棘手。

除此之外,在 Ubuntu 的最新版本中,Upstart 已经开始被 systemd 取代。

启动我所描述的任务的推荐方法是什么?我应该咬紧牙关并使用 Upstart 系统作业,还是有更简单的方法?

答案1

在我关注 Ask Ubuntu 期间,我从未见过有人使用用户和会话 upstart 作业。这是我第一次听说它们的存在。

  • 用户作业在 upstart v1.7 中被弃用,Ubuntu 14.04 附带 v1.12
  • 会话作业是为其他目的(主要是用户会话)而创建的。在服务器中启动用户初始化会话只是为了运行这些守护进程似乎不太合适。

最好坚持使用系统作业,使用susudo以不同的用户身份运行它们,如果使用setuidsetgidexec start-stop-daemon --start -c <myuser> --exec <command>看到可能会更干净以不同用户身份运行作业

顺便说一句,您可以使用start on started postgresql&,stop on stopping postgresql因为您的服务依赖于 postgresql。因此它们在 postgresql 启动后启动,然后在 postgresql 停止前停止。参见此处的类似案例 如何确保一个 Upstart 作业在另一个 Upstart 作业停止之前停止?

为了监控错误,您可以使用其日志记录功能。

相关内容