我需要创建一个 systemd 服务来自动启动一些 owfs-daemon。
我可以使用 手动启动守护进程sudo /opt/owfs/bin/owfs --i2c=ALL:ALL --allow_other /mnt/1wire/
。然后在 中创建了具有不同温度的文件夹和文件/mnt/1wire
。无法以普通用户身份启动 owfs-daemon。
现在我尝试创建一些 systemd 服务来自动启动它(参见下面的代码)。
[Unit]
Description=1-wire service
After=syslog.target
After=network.target
[Service]
Type=simple
ExecStart=/opt/owfs/bin/owfs --i2c=ALL:ALL --allow_other /mnt/1wire/
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
[Install]
WantedBy=multi-user.target
我安装了该服务,也可以通过 来启动它sudo systemctl start owfs.service
。但是在 中没有创建任何文件/mnt/1wire
。sudo systemctl status owfs.service
显示以下输出。
● owfs.service - 1-wire service
Loaded: loaded (/lib/systemd/system/owfs.service; enabled)
Active: inactive (dead) since Sat 2016-02-27 13:11:13 UTC; 20s ago
Process: 1025 ExecStart=/usr/local/bin/temperature/owfs.sh (code=exited, status=0/SUCCESS)
Main PID: 1025 (code=exited, status=0/SUCCESS)
Feb 27 13:11:13 raspberrypi systemd[1]: Started 1-wire service.
我认为该服务未以 root 用户身份启动。我需要对服务文件进行哪些修改才能正确启动 owfs-daemon?
编辑:这是正在使用的服务文件owfs。
[Unit]
Description=1-wire service
[Service]
Type=forking
ExecStart=/opt/owfs/bin/owfs --i2c=ALL:ALL --allow_other /mnt/1wire/
# Give a reasonable amount of time for the server to start up/shut down
TimeoutSec=300
答案1
我使用以下内容:
[Unit]
Description=1-wire filesystem FUSE mount
Documentation=man:owfs(1)
[Service]
Type=forking
ExecStart=/usr/bin/owfs -uall --allow_other /run/owfs
ExecStop=/usr/bin/umount /run/owfs
RuntimeDirectory=owfs
服务类型的真正区别:手册:
如果设置为 forking,则预期使用 ExecStart= 配置的进程将在启动过程中调用 fork()。预期在启动完成且所有通信通道都设置好后,父进程将退出。子进程继续作为主守护进程运行。这是传统 UNIX 守护进程的行为。如果使用此设置,建议同时使用 PIDFile= 选项,以便 systemd 可以识别守护进程的主进程。一旦父进程退出,systemd 将继续启动后续单元。