systemd 创建 root 服务

systemd 创建 root 服务

我需要创建一个 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/1wiresudo 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 将继续启动后续单元。

相关内容