在 systemd 脚本中分叉

alo*_*ser 12 systemd

我希望 systemd 服务处理分叉(我的文件本身不处理分叉。所以我依靠 systemd 来处理)

我的 .service 文件:

[Unit]
Description=swamp services management service
After=syslog.target

[Service]
Type=forking
ExecStart=/usr/bin/swamp

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

Type=forking为我想要实现的目标指定足够了吗?或者它是否类似于新贵中的分叉,它实际上告诉新贵(如果我理解正确,不确定我是否这样做,我是编写 initscripts 的新手)我的服务将处理分叉/守护进程。

jas*_*yan 19

systemd 有很好的文档。请参阅有关服务文件的页面:

如果设置为分叉,则预期使用 ExecStart= 配置的进程将调用 fork() 作为其启动的一部分。当启动完成并且所有的通信通道都设置好后,父进程应该会退出。子进程继续作为主守护进程运行。这是传统 UNIX 守护进程的行为。如果使用此设置,建议同时使用 PIDFile= 选项,以便 systemd 可以识别守护进程的主进程。一旦父进程退出,systemd 将继续启动后续单元。

所以,使用它type只会告诉 systemd 等待直到swamp返回,然后认为它仍在运行:实现它仍然是你的责任......

  • 如果脚本不进行任何分叉,则它要么是 `oneshot`(典型的短运行脚本),要么是 `simple`(不会分叉 + 退出的长时间运行的服务)。 (5认同)
  • @FelipeAlvarez 是的,bash 中的与号运算符相当于 fork 和 exec。 (5认同)
  • 你会考虑一个脚本(Bash?)在另一个进程使用&符号`&`作为背景时分叉另一个进程吗? (4认同)