在 systemctl 单元启动时回显一些文本

在 systemctl 单元启动时回显一些文本

我创建了这个 systemctl 作业,

[Unit]
Description=Evercam Media
After=network.target

[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/opt/evercam_media
ExecStart=/opt/evercam_media/bin/evercam_media start
ExecStop=/opt/evercam_media/bin/evercam_media stop
Restart=always
RestartSec=5
Environment=LANG=en_US.UTF-8
SyslogIdentifier=evercam_media

[Install]
WantedBy=multi-user.target

它工作完美,因为我希望它工作,但我想在启动和停止时显示一些日志,因为当我们启动或停止新贵作业时,它会向我们显示作业已停止或正在等待,但它没有显示任何内容,我们可以添加一些日志,例如“已启动”或“已停止”之类的日志吗?

另外,当我在做的时候看到这份工作的状态时systemctl status evercam_media.service,它会告诉我

● evercam_media.service - Evercam Media
   Loaded: loaded (/etc/systemd/system/evercam_media.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2017-11-07 10:53:40 CET; 1h 3min ago
  Process: 25830 ExecStop=/opt/evercam_media/bin/evercam_media stop (code=exited, status=0/SUCCESS)
  Process: 25692 ExecStart=/opt/evercam_media/bin/evercam_media start (code=exited, status=0/SUCCESS)
 Main PID: 25728 (code=exited, status=1/FAILURE)

主动:失败??

为什么它不说它已停止而不是说失败?任何帮助将不胜感激,谢谢。

答案1

systemd 单元设置为异步命令Type=forkingExecStop=与异步命令一起使用。

这意味着 systemd 将在之后立即终止主进程

/opt/evercam_media/bin/evercam_media 停止
退出。并且Restart=always用来代替Restart=on-failure.

正如其中所述文档

请注意,为此设置指定一个命令通常是不够的,该命令仅要求服务终止(例如,通过为其排队某种形式的终止信号),但不等待服务终止。由于服务的剩余进程在命令退出后立即根据如上所述被终止KillMode=KillSignal=因此这可能不会导致干净停止。因此,指定的命令应该是同步操作,而不是异步操作。

您可以采取多种方法来解决此问题。使用TimeoutSec=或使用不会返回evercam_media1 的终止信号或找到一种方法使您的ExecStop=同步。

至于日志消息,请参阅 的详细标志evercam_media

相关内容