如何最好地启动我的systemd服务以运行多个应用程序

code_fodder

我有一个一次性服务,该服务在/ usr /中调用脚本

这是我的.service文件:

[Unit]
Description = Start apps
After = network.target

[Service]
Type=simple
ExecStart=/usr/start_apps.sh

[Install]
WantedBy=multi-user.target

我的脚本确实有点像:

cd /home/user/apps
# Run apps one at a time in background
./app1 &
./app2 &

现在看来可以尝试运行这些应用程序,但是当我执行pgrep app此操作时,没有任何运行。

因此,我断定这是因为服务已结束。因此,我尝试了另一种方法:

cd /home/user/apps
# Run app1 in back ground 
./app1 &
# Run app2 in forground so the service does not stop
./app2

现在可以正常工作了(pgrep向我显示了应用程序正在运行)-但是,当我启动该服务时,它永远不会返回,我必须执行ctrl + c,然后我可以返回bash提示符,并且两个应用程序仍在运行。

我想要的是启动服务,同时运行两个应用程序,然后只需执行以下操作即可返回命令行:

systemctl start my-service.service

做这个的最好方式是什么?

更新我正在这样安装我的服务:

systemctl stop my-service.service
 ... copy the service/script files in place...
systemctl daemon-reload
systemctl enable my-service.service
systemctl start my-service.service

不确定...但是它可能是相对的?

文件火

在后台启动所有进程应该可以,但是您需要使用它,Type=forking并且您可能想使用其他一些选项,尤其RemainAfterExit=yes重要。

该用例类似于rc.local脚本的处理,该脚本通过此单元模板在systemd中进行处理,因此也许使用所有这些选项将是一个好主意:

[Service]
Type=forking
ExecStart=/usr/start_apps.sh
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

我不确定为什么在前台中有最后一个进程的情况下,为什么会遇到阻塞并必须按Ctrl + C的systemctl start命令?您是否必须在命令本身上按Ctrl + C的命令?我会说有点奇怪...

请注意,以这种方式启动应用程序(其中许多是在后台从脚本中启动)并不是真正打算使用systemd的方式,因此您会错过很多功能。例如,systemctl stopsystemctl restart将极有可能根本无法在该设备上运行。

如今,在后台运行应用程序被视为“黑客”(不仅被systemd破坏,而且被其许多前身和大多数其他现代服务管理器所破坏。)尽管systemd仍然能够做到这一点,但该支持主要是为了向后兼容并且不打算在存在更好的替代方法时使用。

我的建议是为每个应用程序创建单独的服务,或者,如果要启动同一流程的许多实例,则可以使用模板单元。还应查看指令以指定单元之间的依赖关系,以便它们以正确的顺序启动和停止。特别是,请看一下该PartOf=指令,该指令使您可以将一组服务作为一个单元进行管理,从而使您可以通过一个命令一起启动,停止或重新启动所有服务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

在Angular 2中启动应用程序时如何运行服务

来自分类Dev

启动Android应用程序时如何启动服务?

来自分类Dev

如何使用Nvidia多进程服务(MPS)运行多个非MPI CUDA应用程序?

来自分类Dev

Android:关闭我的应用程序后启动我的服务

来自分类Dev

如何使我的应用程序运行更快

来自分类Dev

(如何)我可以在同一服务器和端口上运行多个Spring Boot应用程序吗?

来自分类Dev

如何最好地在WPF应用程序中实现异步?

来自分类Dev

如何最好地在基于Rack的应用程序中定义ENV变量?

来自分类Dev

如何设置systemd以确保它在服务器关闭/重启时停止我的应用程序

来自分类Dev

如何按需运行后台服务-不在应用程序启动或计时器上运行

来自分类Dev

多个应用程序池作为网络服务运行

来自分类Dev

如何最好地在Android应用程序/游戏中显示4x4图像的网格?

来自分类Dev

android如何在启动时在后台运行我的应用程序

来自分类Dev

如何在复杂的应用程序中最好地使用核心数据

来自分类Dev

如何从在后台运行的我的服务中知道运行状况最好的应用程序的程序包名称(android)

来自分类Dev

如何最好地部署此多层应用程序?

来自分类Dev

Windows 10不记得我从“运行”启动的应用程序

来自分类Dev

启动Android应用程序时如何启动服务?

来自分类Dev

如何运行我的Android应用程序?

来自分类Dev

如何最好地在Rails应用程序的数据库中表示角色?

来自分类Dev

启动时运行多个Java应用程序

来自分类Dev

Android:关闭我的应用程序后启动我的服务

来自分类Dev

如何为应用程序创建服务用户并在启动时从该用户运行它

来自分类Dev

启动应用程序未运行我的脚本

来自分类Dev

如何将 qtdbus 应用程序作为 systemd 运行?

来自分类Dev

如何使用应用程序类来启动服务并在我的活动中使用它?

来自分类Dev

调试 C# 应用程序导致 VisualStudio 停顿时如何最好地诊断问题

来自分类Dev

当另一个应用程序启动时如何运行我的应用程序

来自分类Dev

如何让 Android 应用程序只运行后台服务,而不能启动?

Related 相关文章

  1. 1

    在Angular 2中启动应用程序时如何运行服务

  2. 2

    启动Android应用程序时如何启动服务?

  3. 3

    如何使用Nvidia多进程服务(MPS)运行多个非MPI CUDA应用程序?

  4. 4

    Android:关闭我的应用程序后启动我的服务

  5. 5

    如何使我的应用程序运行更快

  6. 6

    (如何)我可以在同一服务器和端口上运行多个Spring Boot应用程序吗?

  7. 7

    如何最好地在WPF应用程序中实现异步?

  8. 8

    如何最好地在基于Rack的应用程序中定义ENV变量?

  9. 9

    如何设置systemd以确保它在服务器关闭/重启时停止我的应用程序

  10. 10

    如何按需运行后台服务-不在应用程序启动或计时器上运行

  11. 11

    多个应用程序池作为网络服务运行

  12. 12

    如何最好地在Android应用程序/游戏中显示4x4图像的网格?

  13. 13

    android如何在启动时在后台运行我的应用程序

  14. 14

    如何在复杂的应用程序中最好地使用核心数据

  15. 15

    如何从在后台运行的我的服务中知道运行状况最好的应用程序的程序包名称(android)

  16. 16

    如何最好地部署此多层应用程序?

  17. 17

    Windows 10不记得我从“运行”启动的应用程序

  18. 18

    启动Android应用程序时如何启动服务?

  19. 19

    如何运行我的Android应用程序?

  20. 20

    如何最好地在Rails应用程序的数据库中表示角色?

  21. 21

    启动时运行多个Java应用程序

  22. 22

    Android:关闭我的应用程序后启动我的服务

  23. 23

    如何为应用程序创建服务用户并在启动时从该用户运行它

  24. 24

    启动应用程序未运行我的脚本

  25. 25

    如何将 qtdbus 应用程序作为 systemd 运行?

  26. 26

    如何使用应用程序类来启动服务并在我的活动中使用它?

  27. 27

    调试 C# 应用程序导致 VisualStudio 停顿时如何最好地诊断问题

  28. 28

    当另一个应用程序启动时如何运行我的应用程序

  29. 29

    如何让 Android 应用程序只运行后台服务,而不能启动?

热门标签

归档