Systemd 服务 echo 和 ping 在启动时不起作用

Systemd 服务 echo 和 ping 在启动时不起作用

我在 Raspberry Pi 上创建了一个简单的 oneshoot systemd 服务文件,该文件在启动时启动,并将特定的日志命名空间和一些 dmesg 本地记录到文件中。

在本地执行脚本作为测试似乎可以工作,但是自动启动有问题并且根本不起作用。

测试服务

[Unit]
Description=Test message
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/data/test.sh
StandardOutput=journal

[Install]
WantedBy=multi-user.target

系统很简单,没有太多内容。只有 root 用户存在。

系统还会启动一个温度记录器,该记录器会记录到日志并具有 LogNamespace=temp_logger。我没有把它放在依赖项或其他地方。

现在,当我执行包含以下内容的文件 test.sh 时:

#!/bin/bash

echo $(date)
TEST_DIR=/data/testdirectory

mkdir -p $(TEST_DIR)

journalctl -f --namespace=temp_logger > ${TEST_DIR}/journaltemp.log &

dmesg -w > ${TEST_DIR}/dmesg.log &


看起来效果很好。没有错误,什么都没有。看起来不错。如果我启用该服务systemctl enable test并重新启动系统,似乎会出现一些问题。

该目录未创建,日志文件也不存在。 (我从测试中删除了那些)

检查时,systemctl status test我可以看到错误消息,告诉我未找到命令 echo、mkdir 等。

当我将所有来自echomkdir等的调用修改为/bin/echo等时/bin/mkdir,它似乎有效。我得到回声、日期和目录。我使用命令检查了对二进制文件的所有调用which并调整了路径。

然而,日志日志似乎不起作用。文件存在但没有内容(大小 0)

那里到底出了什么问题?为什么我需要提供二进制文件的绝对路径?为什么journalctl 不起作用?

答案1

事实证明,该服务具有简单的依赖性,它在日志服务本身启动之前启动。

这可能就是为什么文件在那里,但大小一直为 0。lsof没有向我显示文件 dmesg.log 或journaltemp.log 的任何进程

我最终只是 sleep 5在文件 test.sh 的开头放置了一个 good ol' ,从那时起它就可以工作了。

通过设置在服务文件中的日志之后启动,可能有一个更好/更干净的解决方案,但我无法弄清楚。睡眠正常,现在是我的 test.sh 的一部分

相关内容