systemd 服务无法使用 `tail` 输出到控制台

systemd 服务无法使用 `tail` 输出到控制台

我无法正确配置我的 systemd 服务 (systemd 249.11-0ubuntu3.12)。它应该启动一个tail输出到控制台的进程。 Ubuntu 作为 Proxmox VM 运行。

启动时,服务启动但退出且没有有用的输出:

× watchbackup.service - Startup Applications
     Loaded: loaded (/etc/systemd/system/watchbackup.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Fri 2024-03-01 21:47:01 CET; 27s ago
    Process: 939 ExecStart=/opt/backup-proxmox/tools/watchbackup.sh (code=exited, status=1/FAILURE)
   Main PID: 939 (code=exited, status=1/FAILURE)

如果我重新启动服务手动,它按预期工作。执行的 shell 脚本(我未能将其tail直接放入服务单元文件的ExecStart命令中):

#!/bin/sh
sleep 5
ls -la  /net/var/archiv-1/log/ > /tmp/foo
echo tty1 > /dev/tty1
echo tty0 > /dev/tty0
echo console > /dev/console
tail -f /net/var/archiv-1/log/backup.log 

睡眠成功延迟,文件按预期存在(尽管/net/var/archiv-1是 NFS 挂载),所有三个回显都在控制台上可见。但是,tail立即终止。

我上次尝试的服务单元文件如下所示:

[Unit]
Description=Startup Applications
After=network.target
After=net-var-archiv\x2d1.mount
After=net-var-archiv\x2d1.service

[Service]
WorkingDirectory=/opt/backup-proxmox
ExecStart=/opt/backup-proxmox/tools/watchbackup.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Type=simple
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty1

[Install]
WantedBy=multi-user.target

有什么建议可以确定为什么tail如果服务在启动时启动但我可以在手动重新启动服务时无法使用该文件吗?

答案1

使用本机 SystemD 日志

tail用。。。来代替journalctl -f -u watchbackup.service

我不知道为什么不允许使用 tail,只有修复方法。当我找到原因时,我会添加一个更具体的答案,但我怀疑这与 tail 无法监视实时写入这一事实有关,而 systemd 作为 init 系统正在实时运行。

相关内容