为什么我的 systemd 服务运行后立即关闭?

为什么我的 systemd 服务运行后立即关闭?

我创建了一个简单的脚本来运行其他四个命令。我将其位于 /usr/local/bin/lbrystartup.sh,其中包含以下内容:

#!/bin/bash

#Start web scripts

screen -dmS main /var/www/html/main.sh
screen -dmS loop2 /var/www/html/loop2.sh
screen -dmS blocks /var/www/html/blocks.sh
screen -dmS lbry /var/stratum/run.sh lbry

当我运行此脚本时,它运行良好。我最终在列表中得到了四个屏幕实例,并且它们都在必要时运行。

接下来,我创建了一个在启动时运行的 systemd 服务。

coinscripts.service 如下所示:

[Unit]

Description = Coinscripts daemon
After network.target = auditd.service

[Service]

type=Simple
ExecStart =/usr/local/bin/lbrystartup.sh

[Install]

WantedBy = multi-user.target

我已经启用了该服务,并且成功启用。但是,当我使用“sudo systemctl start coinscripts”运行该服务时,屏幕实例不会打开。但是,当我使用 systemctl status coinscripts 时,我得到以下信息:

● coinscripts.service - Coinscripts 守护进程 已加载:已加载(/etc/systemd/system/coinscripts.service;已启用;供应商已提供
活动:自 2017-06-30 星期五 21:59:10 PDT;1 分 3 秒前以来处于非活动状态(已死亡) 进程:1050 ExecStart=/usr/local/bin/lbrystartup.sh(代码=exited,状态=0/S 主 PID:1050(代码=exited,状态=0/SUCCESS)

6月30日 21:59:10 ubuntu systemd[1]:已启动 Coinscripts 守护进程。

当我重新启动机器时也会发生同样的情况。

我在服务脚本中做错了什么?我正在使用 Ubuntu 16.04

答案1

您还遇到这个问题吗?这更像是一条评论而不是答案,但我显然没有足够的积分或其他东西来评论……

我在 18.04 上遇到了一个类似的问题。你使用的是 16.04 吗?

我注意到您的 After= 部分有错误。应该是:

After=network.target auditd.service

不确定你是否真的需要 auditd.service,但我认为应该没问题。此外,你还有:

type=Simple

我认为需要的是:

Type=simple

ExecStart 行的等号可能也存在问题(尝试删除前面的空格),但我不确定 systemd 如何处理空格,所​​以这样可能没问题。

最后,我认为您可能希望它是 Type=forking,因为您正在屏幕中调用一个在完成后不会退出的子进程。

编辑:

我还刚刚意识到你没有在脚本中使用绝对路径(即 /usr/bin/program 而不是 program)。也试一下。

我还想提出一个建议,使用 tmux 而不是 screen。根据我的经验,screen 不是很稳定,经常崩溃,而 tmux 是同一服务的更好实现。不过命令不同,所以如果你决定尝试的话,请仔细阅读。

相关内容