我有一个简单的 systemd 服务,运行一段时间后退出。它通常由 systemd 计时器触发,但有时我想手动运行它(好吧,从脚本中)。问题是 - 我需要该脚本将我的服务输出的任何内容输出到终端,并在服务退出时执行其他一些操作。
我真的很想能够做到这一点,systemctl start foo.service
而不是将我的移动ExecStart=
到 bash 脚本并仅仅运行它,原因如下:
- 我希望行为完全相同。我的经验告诉我,从 shell 和从 shell-from-systemd 运行的东西有时会表现不同。
- 我不知道如何像使用 systemd 单元的
Limit*=
指令那样限制脚本使用的资源。 - 我最多只需要一个服务实例,通过 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
选项,并且从文档判断它应该可以做我想要的事情,但我不确定当服务由计时器运行时它将如何工作。
我有什么选择?