连接到 systemd 服务的标准输出/错误

连接到 systemd 服务的标准输出/错误

我有一个简单的 systemd 服务,运行一段时间后退出。它通常由 systemd 计时器触发,但有时我想手动运行它(好吧,从脚本中)。问题是 - 我需要该脚本将我的服务输出的任何内容输出到终端,并在服务退出时执行其他一些操作。

我真的很想能够做到这一点,systemctl start foo.service而不是将我的移动ExecStart=到 bash 脚本并仅仅运行它,原因如下:

  1. 我希望行为完全相同。我的经验告诉我,从 shell 和从 shell-from-systemd 运行的东西有时会表现不同。
  2. 我不知道如何像使用 systemd 单元的Limit*=指令那样限制脚本使用的资源。
  3. 我最多只需要一个服务实例,通过 systemctl 启动可以确保这一点,但通过脚本启动则不能(除非我通过 pidfile 处理使其复杂化)。

基本上,我想要的是:

tail --pid $MY_PID -f my.log

但通过 journalctl 完成。

使用:

journalctl -u my.service -o cat --no-pager -f

启动后,服务几乎按我想要的方式工作,但是在我的服务退出后它也不会退出。

如果可能的话,我不想使用StandardOutput=并将StandardError=我的日志重定向到文件并tail从上面运行命令,因为我希望 journalctl 存储和管理我的日志。

我知道StandardOutput=tty选项,并且从文档判断它应该可以做我想要的事情,但我不确定当服务由计时器运行时它将如何工作。

我有什么选择?

相关内容